我使用的操作系统是WIN10,开发环境是keil5
根据提醒安装完成软件包,keil安装包可以从各家开发板开源资料获取。
打开后输入工程名
如下根据需求选择相关配置
接着选择了无操作系统和点灯模板
如下生成工程,然后到工程目录打开工程
打开keil工程之后进行编译,然后就出来一堆错误,如下
然后是查看帮助手册,找到预定义的版本宏
然后修改增加以下两处代码
再次编译就通过了,然后检查map文件的向量表位置是否符合预期
接着就开始阅读代码,了解demo的执行逻辑啦
启动过程分析
首先是找到中断向量表,得到复位中断函数如下
然后得到了SystemInit和main函数,按经验main应该是用户程序入口了
最后调用了hal_entry函数
hal_entry代码拷贝出来贴在下面进行分析,分析过程直接写进代码注释
void hal_entry (void)
{
//这部分没有用到TZ所以没有用
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
//这里定义了软件延时函数的单位是毫秒
/* Define the units to be used with the software delay function */
const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS;
//这里定义了闪烁频率
/* Set the blink frequency (must be <= bsp_delay_units */
const uint32_t freq_in_hz = 2;
//这里计算以下2hz的频率对应的delay值
/* Calculate the delay in terms of bsp_delay_units */
const uint32_t delay = bsp_delay_units / freq_in_hz;
//这里定义了LED的数量和对应的引脚组
//LED1=P4_15,LED2=P4_04,LED3=P4_05
/* LED type structure */
bsp_leds_t leds = g_bsp_leds;
//这里检查一下是否有LED可以用
/* If this board has no LEDs then trap here */
if (0 == leds.led_count)
{
while (1)
{
; // There are no LEDs on this board
}
}
/* Holds level to set for pins */
bsp_io_level_t pin_level = BSP_IO_LEVEL_LOW;
while (1)
{
//这里使能PFS寄存器的访问权限
//PFS寄存器具体作用需要看手册了,暂时还不清楚。
/* Enable access to the PFS registers. If using r_ioport module then register protection is automatically
* handled. This code uses BSP IO functions to show how it is used.
*/
R_BSP_PinAccessEnable();
//这里设置所有LED的引脚电平为pin_level电平,初始值为低电平
/* Update all board LEDs */
for (uint32_t i = 0; i < leds.led_count; i++)
{
/* Get pin to toggle */
uint32_t pin = leds.p_leds[i];
/* Write to this pin */
R_BSP_PinWrite((bsp_io_port_pin_t) pin, pin_level);
}
/* Protect PFS registers */
R_BSP_PinAccessDisable();
//这里对pin_level进行更新
/* Toggle level for next write */
if (BSP_IO_LEVEL_LOW == pin_level)
{
pin_level = BSP_IO_LEVEL_HIGH;
}
else
{
pin_level = BSP_IO_LEVEL_LOW;
}
//延时一下
/* Delay */
R_BSP_SoftwareDelay(delay, bsp_delay_units);
}
}
经过对源码的分析可以知道这个demo是周期性的闪烁所有的led灯,那么接下来烧尽开发板试试吧,看会不会遇到问题。
开发板没在手里等验证完了更新结果。
更多回帖