RA4M2串口传输AS5600磁编码器数据测评
1. 套件概述
RA4M2-SENSOR 是一款基于 RA4M2 系列微控制器的评估套件,支持 TrustZone 技
术和片内安全加密引擎(SCE),提供硬件级安全保护,确保敏感数据安全。RA4M2 MCU
采用 40nm 工艺,具有出色的低功耗性能(CoreMark®功耗低至 81µA/MHz)。
套件支持瑞萨的灵活配置软件包(FSP),FSP 基于 FreeRTOS 构建,能够与其他实
时操作系统(RTOS)和中间件兼容,并且可以通过丰富的外设接口(如 I2C、SPI、ADC
等)与各种传感器模块(如温湿度、气体、光传感器等)进行无缝连接。此外,该套件
包括传感器(SENSOR)系列接口以及对微控制器所有引脚的通孔访问,极大地提升了
扩展性,满足开发者对不同应用需求的扩展。
2. 特征
内核:Arm® Cortex®-M33,频率高达 100MHz,支持 TrustZone
存储器:高达 512kB 的 Flash,128kB 的 SRAM
引脚:48-pin,LQFP 封装
温度:-40 °C 至 105 °C
电压范围:2.7 V 至 3.6 V
12 位 A/D 转换器、温度传感器,电容式触摸传感单元 (CTSU)
CAN 2.0B,四线 SPI,独立 SPI/I2C 多主接口
SCI(UART、简单 SPI、简单 I
2C),SDHI 和 MMC
3. 系统控制和生态系统访问
两个 USB 全速 2.0 主机(Type-C 连接器)
两种烧录方式
– SWD 烧录口:编程或调试 PC
– 串口烧录:打印数据或烧录
用户指示灯和按钮
– 三个用户指示灯(红色和黄色)
– 两个串口指示灯(红色)指示调试连接
– 两个电源指示灯(红色)
– 三个用户按键,一个复位按键
外部晶振
– 低速晶振:32.768KHz
– 高速晶振:12MHz
生态系统扩展
– 微控制器全部引脚由 CN3、CN4、CN7、CN8 引出
– 传感器(SENSOR)系列 扩展连接器
支持多种集成开发环境(IDE)
– Renesas e2 studio
– Keil MDK
– IAR EWARM
开发板正面如图:

背面如图:

选择P100、P101为磁编码器AS5600的I2C接口的SCL与SDA引脚,选择P109与P110作为串口txd引脚和rxd引脚,新建工程选择R7FA4M2AD3CFL作为平台芯片,再进行IO和串口设置,设置串口通道9与引脚要对应,回调名以及波特率等等都需要在对话框中设置,如图:

还要设置正确的时钟源,晶振要和开发板上参数一致:

添加如下代码,可以将串口进行重定位:
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void uart9_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
#ifdef __GNUC__ //串口重定向
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
还要在编译设置中完成如下配置,右键项目进入属性界面,选择 C/C++ 构建 - 设置 - GNU Arm Cross C Linker - Miscellaneous,勾选 printf 、scanf 以及syscalls 选项:

打开串口即可使用printf函数将数据从串口发送出去:
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
printf("hollow Acce");
接着配置AS5600读取数据代码,将如下文件复制到工程中,并且添加到项目中:

配置I2C引脚:

代码主要在as5600.h中进行修改:
#include "hal_data.h"
#define Sim_I2C1_SCL_LOW R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_00, BSP_IO_LEVEL_LOW)
#define Sim_I2C1_SCL_HIG R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_00, BSP_IO_LEVEL_HIGH)
#define Sim_I2C1_SDA_LOW R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_LOW)
#define Sim_I2C1_SDA_HIG R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_HIGH)
#define Sim_I2C1_SDA_STATE R_BSP_PinRead(BSP_IO_PORT_01_PIN_01)
#define Sim_I2C1_DELAY R_BSP_SoftwareDelay (100, BSP_DELAY_UNITS_MILLISECONDS);
#define Sim_I2C1_NOP R_BSP_SoftwareDelay (1, BSP_DELAY_UNITS_MILLISECONDS);
在主函数中调用以下函数测量磁编码器数据并通过串口发送:
void PrintMenu(void)
{
printf("AS5600 Serial Interface Programe----SC-electronic\r\n");
printf\("1 \- Set start position\\t| "\); printf\(" 6 \- get MPOS\\r\\n"\);
printf("2 - Set end position\t| "); printf(" 7 - get raw angle\r\n");
printf("3 - Set max angle range\t| "); printf(" 8 - get scaled angle\r\n");
printf("4 - Get max angle range\t| "); printf(" 9 - detect magnet\r\n");
printf("5 - Get ZPOS \t\t| "); printf("10 - get magnet strength\r\n");
printf("\r\n");
printf("Number of burns remaining: "); printf("%d\r\n",(3 - getBurnCount()));
printf("96 - Burn Angle\r\n");
printf("98 - Burn Settings (one time)\r\n");
MenuChoice = PrintInFromConsole\(\);
printf\("You choice NO\.%d programe\\r\\n",MenuChoice\);
}
调试结果如下:

硬件实物接线如下:

*附件:RA4M2_Project2.rar
![17a7a7d281038bad539797daed67f39c]()