RA4M2串口传输MPU6050陀螺仪数据测评
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
开发板正面如图:

背面如图:

选择P101、P102为陀螺仪mpu6050的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");
接着配置mpu6050读取数据代码,将如下文件复制到工程中,并且添加到项目中:

配置I2C引脚:

代码主要在bsp_iic.h中进行修改:
#define I2C_SCL_1() R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_HIGH) /* SCL = 1 */
#define I2C_SCL_0() R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_01, BSP_IO_LEVEL_LOW) /* SCL = 0 */
#define I2C_SDA_1() R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_02, BSP_IO_LEVEL_HIGH) /* SDA = 1 */
#define I2C_SDA_0() R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_01_PIN_02, BSP_IO_LEVEL_LOW) /* SDA = 0 */
#define I2C_SDA_READ() R_BSP_PinRead(BSP_IO_PORT_01_PIN_02)
还可以修改IIC数据传输速度,在i2c_Delay函数中进行修改:
void i2c_Delay(void)
{ uint8_t i;
for \(i = 0; i < 20; i\+\+\);
}
在主函数中添加代码:
short Acce[3];
short Gryo[3];
void hal_entry(void)
{
/\* TODO: add your own code here \*/
err = R\_SCI\_UART\_Open\(&g\_uart9\_ctrl, &g\_uart9\_cfg\);
assert\(FSP\_SUCCESS == err\);
printf\("hollow Acce"\);
MPU\_Init\(\);
while(1){
MPU_Get_Gyroscope(&Gryo[0],&Gryo[1],&Gryo[2]); MPU_Get_Accelerometer(&Acce[0],&Acce[1],&Acce[2]);
printf("Acce is %d %d %d ",Acce[0],Acce[1],Acce[2]);
printf("Gyro is %d %d %d ",Gryo[0],Gryo[1],Gryo[2]);
\}
#if BSP_TZ_SECURE_BUILD
/\* Enter non\-secure code \*/
R\_BSP\_NonSecureEnter\(\);
#endif
}
调试结果如下:

硬件实物接线如下:

![81d4962f810133601f8bb34111f27d9d]()