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
* william hill官网
: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 开发板》
更多回帖