Renesas R7FA8D1BH (Cortex®-M85) 输入接口的应用

发布于:2024-08-02 ⋅ 阅读:(43) ⋅ 点赞:(0)

Renesas R7FA8D1BH (Cortex®-M85) 控制DS18B20和ADC,实现两个页面的跳转功能

目录

概述

1 软硬件

1.1 软硬件环境信息

1.2 开发板信息

1.3 调试器信息

2 FSP和KEIL配置

2.1 硬件接口电路

2.2  FSB配置KEY的IO 

3 功能实现

3.1 FSP生成项目

3.2 KEY功能实现

4  KEY控制UI跳转

4.1 功能描述

4.2  state功能实现

4.3 源代码

 5 测试


概述

本文主要介绍Renesas R7FA8D1BH (Cortex®-M85)设计一个综合的应用案例:使用板卡上的两个按键实现UI页面跳转功能。page-1: 实现显示ADC的count和实际电压值;page-2:显示DS18B20的实时数据。通过按键实现跳转到下一个页面或者返回到当前页面的功能。

1 软硬件

1.1 软硬件环境信息

软硬件信息 版本信息
Renesas MCU R7FA8D1BH
Keil MDK ARM 5.38
FSP 版本 5.3.0
调试工具:N32G45XVL-STB DAP-LINK

1.2 开发板信息

笔者选择使用野火耀阳开发板_瑞萨RA8,该板块的主控MCU为R7FA8D1BHECBD,7FA8D1BHECBD的内核为ARM Contex-M85。

1.3 调试器信息

对于R7FA8D1BHECBD芯片,其使用的内核为Cortex®-M85 Core, ST-LINK-V2或者J-LINK-V9不支持下载和调试功能。笔者经过多次尝试,发现N32G45XVL-STB板卡上自带的DAP-LINK可以下载和调试R7FA8D1BHECBD。

下图为N32G45XVL-STB开发板实物图:

2 FSP和KEIL配置

2.1 硬件接口电路

SW3:  连接PA13引脚,其对应FSP上的配置引脚为BSP_IO_PORT_10_PIN_13

SW4: 连接P404引脚,其对应FSP上的配置引脚为BSP_IO_PORT_04_PIN_04

2.2  FSB配置KEY的IO 

1)  配置SW3,其对应IO: PA13

2) 配置SW4,其对应IO: P404

 

3 功能实现

3.1 FSP生成项目

点击Generate Project,FSP生成项目文件,在pin_data.c文件中生成了pin的相关配置参数。

 3.2 KEY功能实现

1)创建key.h文件,编写如下代码:

#ifndef _KEY_H
#define _KEY_H
#include "hal_data.h"


#define KEY1_SW2_PIN    BSP_IO_PORT_10_PIN_13
#define KEY2_SW3_PIN    BSP_IO_PORT_04_PIN_04

#define KEY_ON  1
#define KEY_OFF 0


#endif  /* _KEY_H */

2)创建key.c文件,编写如下代码:

 /*
 FILE NAME  :  key.c
 Description:  board's key interface 
 Author     :  tangmingfei2013@126.com
 Date       :  2024/06/03
 */
#include "key.h" 
#include "hal_data.h"

#define KEY_DELAY_MS(ms)      R_BSP_SoftwareDelay(ms, BSP_DELAY_UNITS_MILLISECONDS);

 uint32_t Key_Scan(bsp_io_port_pin_t key)
{
    bsp_io_level_t state;

    R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
    if (BSP_IO_LEVEL_HIGH == state)
    {
        return KEY_OFF; 
    }
    else
    {
        do  
        {
            R_IOPORT_PinRead(&g_ioport_ctrl, key, &state);
            KEY_DELAY_MS(10);
        } while (BSP_IO_LEVEL_LOW == state);
    }

    return KEY_ON;
}

/* End of this file */

4  KEY控制UI跳转

4.1 功能描述

1) UI功能定义

系统实现两个UI页面:

UI-Page-1: 

             第一行:显示通道0的count值,同时显示实际电压值

             第二行: 显示采集MCU内部的温度值

UI-Page-2: 

             第一行:显示字符串DS18B20

             第二行: 显示DS18B20的温度值 

2) KEY控制页面流程

SW2: 跳转到页面UI-Page-1

SW3: 跳转到页面UI-Page-2

4.2  state功能实现

代码第12行: 定义跳转指针函数

代码第13行:定义跳转函数变量

代码37行:读取SW2的值,如果该键被按下,跳转到NEXT

代码40行:读取SW3的值,如果该键被按下,跳转到BACK

4.3 源代码

 /*
 FILE NAME  :  app_ui.c
 Description:  app UI
 Author     :  tangmingfei2013@126.com
 Date       :  2024/06/03
 */
#include "bsp_i2c.h" 
#include "hal_data.h"
#include "oled_drv.h"
#include "bsp_led.h"
#include "bsp_timer.h"
#include "bsp_uart.h"
#include "bsp_adc.h"
#include "ds18b20.h" 
#include "app_ui.h" 
#include "key.h" 
#include "app_state.h" 

typedef enum{
   INIT_DQ = 0,
   NEXT,
   BACK,
    
}APP_STATE;

static void dispADC_state( void *ptr );
static void dispDS18B20_state( void *ptr );


STATE_FUNC pSt_State = dispADC_state;


 uint8_t key_getState( void )
{
     uint8_t run_state = INIT_DQ;
    
     if( Key_Scan(KEY1_SW2_PIN) == KEY_ON){
         run_state = NEXT;
     }
     else if( Key_Scan(KEY2_SW3_PIN) == KEY_ON){
         run_state = BACK; 
     }
     
     return run_state;
}

void state_machine(void)
{
    pSt_State((void *)pSt_State);
}


static void dispADC_state( void *ptr )
{
    uint8_t run_state;
    
    (void)ptr;
    oled_Clear();
    oled_SetCharSize( FONT_16 );  
    oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  
    
    while(1)
    {
        run_state = key_getState();
        if( run_state == NEXT ){
             pSt_State = dispDS18B20_state;
             return;
        }
        ui_active();
    }
}

static void dispDS18B20_state( void *ptr )
{
    uint8_t run_state;
    
    (void)ptr;
    oled_Clear();
    oled_SetCharSize( FONT_16 );  
    oled_PrintfString(13,0,(uint8_t*)"Renesas MCU ");  
    
    while(1)
    {
        run_state = key_getState();
        if( run_state == BACK ){
             pSt_State = dispADC_state; 
             return;
        }
        ui_dispDS18b20();
    }
}


 5 测试

编译代码,下载到板卡中运行,其结果如下:

1)page-1: 显示ADC的值

2)page-2: 显示DS18B20值