|
【瑞萨RA4系列开发板体验】 参考野火RA6M5的例程移至到RA4M2-mdk开发环境-printf串口重定向+systick延时
作者:jf_66383146
FSP SmartConfig 配置
heap配置:
LED配置:
sci串口配置:
MDK 代码编辑:
- void hal_entry(void)
- {
- /* TODO: add your own code here */
-
- uint32_t i=0;
- double f=3.14159;
- char *str="Hello RA4m2!";
- R_BSP_PinAccessEnable (); //启用对PFS寄存器的访问
- SysTick_Init (1000); //初始化系统时钟
- Debug_UART9_Init();//初始化串口
- R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
- while(1)
- {
- LED1_ON;
- SysTick_Delay(500,SYS_DELAY_UNITS_MILLISECONDS);
- printf("%s\n\r",str);
- printf("%f\n\r",f);
- printf("%d\n\r",i++);
- LED1_OFF;
- SysTick_Delay(500,SYS_DELAY_UNITS_MILLISECONDS);
-
- }
- #if BSP_TZ_SECURE_BUILD
- /* Enter non-secure code */
- R_BSP_NonSecureEnter();
- #endif
- }
复制代码 串口bsp_debug_uart.c
- #include "bsp_debug_uart.h"
- /* 调试串口 UART9 初始化 */
- void Debug_UART9_Init(void)
- {
- fsp_err_t err = FSP_SUCCESS;
-
- err = R_SCI_UART_Open (&g_uart9_ctrl, &g_uart9_cfg);
- assert(FSP_SUCCESS == err);
- }
- /* 发送完成标志 */
- volatile bool uart_send_complete_flag = false;
- /* 串口中断回调 */
- void debug_uart9_callback (uart_callback_args_t * p_args)
- {
- switch (p_args->event)
- {
- case UART_EVENT_RX_CHAR:
- {
- /* 把串口接收到的数据发送回去 */
- R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&(p_args->data), 1);
- break;
- }
- case UART_EVENT_TX_DATA_EMPTY:
- {
- uart_send_complete_flag = true;
- break;
- }
- default:
- break;
- }
- }
- /* 重定向 printf 输出 */
- #if defined __GNUC__ && !defined __clang__
- int _write(int fd, char *pBuffer, int size); //防止编译警告
- int _write(int fd, char *pBuffer, int size)
- {
- (void)fd;
- R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)pBuffer, (uint32_t)size);
- while(uart_send_complete_flag == false);
- uart_send_complete_flag = false;
- return size;
- }
- #else
- int fputc(int ch, FILE *f)
- {
- (void)f;
- R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
- while(uart_send_complete_flag == false);
- uart_send_complete_flag = false;
- return ch;
- }
- #endif
复制代码 bsp_SysTick.c
- /**
- ******************************************************************************
- * [url=home.php?mod=space&uid=1455510]@file[/url] bsp_SysTick.c
- * [url=home.php?mod=space&uid=40524]@author[/url] fire
- * [url=home.php?mod=space&uid=644434]@version[/url] V1.0
- * @date 2022-7-13
- * [url=home.php?mod=space&uid=2666770]@Brief[/url] SystemTick 系统滴答计时器的配置(可配置中断周期)和使用滴答计时器的延时函数
- ******************************************************************************
- * @attention
- *
- * 实验平台 : RA6M5
- * 公司 :http://www.embedfire.com
- * 论坛 :http://www.firebbs.cn
- * 淘宝 :http://firestm32.taobao.com
- *
- ******************************************************************************
- */
- #include "bsp_SysTick.h"
- static __IO uint32_t IT_nums; //延时需要触发中断的次数
- static uint32_t IT_Period; //中断周期(单位为时钟节拍数)
- /**
- * @brief 启动系统滴答计时器 SysTick
- * @param IT_frequency: 滴答计时器每秒的中断次数
- * @retval 无
- */
- void SysTick_Init(uint32_t IT_frequency)
- {
- /* SystemFrequency在这里默认为200M
- * SystemFrequency / 1000 1ms中断一次
- * SystemFrequency / 100000 10us中断一次
- * SystemFrequency / 1000000 1us中断一次
- */
- IT_Period = SystemCoreClock / IT_frequency;
- uint32_t err = SysTick_Config (IT_Period);
- assert(err==0); //capture error
- }
- /**
- * @brief 延时程序
- * @param delay: 延时的单位时间
- * @param unit: 延时的单位
- * @retval 无
- */
- void SysTick_Delay(uint32_t delay, sys_delay_units_t unit)
- {
- uint32_t SumTime = delay * unit; //计算总延时时间(单位为时钟节拍数)
- IT_nums = SumTime/IT_Period; //计算进入中断的次数
- while (IT_nums != 0);
- }
- /**
- * @brief SysTick的中断服务函数
- * @param 无
- * @retval 无
- * @attention 用e2 studio编译会出现警告,但是没有影响,不需要管
- */
- void SysTick_Handler(void)
- {
- if (IT_nums != 0x00)
- {
- IT_nums--;
- }
- }
- /*********************************************END OF FILE**********************/
复制代码 串口打印
详细说明可以参考 《瑞萨 RA 系列 FSP 库开发实战指南 基于野火启明 6M5 开发板》
|
|