• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

stm32调试小小知识点

大家在在学习stm32仿真时遇到过这个问题?

以前就遇到但是没有去想,开始仿真时自动进入main函数调试。如图所示

按下仿真工具栏的“复位”后,

仿真走到了起动文件中,在 LDR     R0, =__main               BX      R0两个汇编语句怎么按都进不了main函数中。然后就想到了在设置main断点,再点击执行到断点就可以轻松地进入主函数中调试了。

如图所示

问题的确很奇怪,

最后发现配置时没有把微库勾

打√后再调试仿真

现在都正常了,复位后可以进去main函数了

再看这个

STM32F10xxx_Keil中添加的预定义宏

其中USE_STDPERIPH_DRIVER和STM32F10X_HD什么意思?

(1)USE_STDPERIPH_DRIVER 

to use or not the peripheral’s drivers in application code (i.e. code will be based on direct access to peripheral’s registers rather than drivers API) , this option is controlled by the #define USE_STDPERIPH_DRIVER

即这个定义控制了是否在应用中启用外设驱动。我们使用标准外设库本来就为了方便控制外设,所以要添加这个定义,以启用外设驱动。

(2)STM32F10X_HD

   如果你使用stm32f10x_stdperiph_lib,会发现在stm32f10x.h文件会有一段关于宏选择的代码,每种类别都有所区别,例如sram或者flash或者外设数量不一样,所以stm32标准外设库必须根据你使用的处理器来做相应的预处理。如:

我们可以更改stm32f10x.h中的定义,这样,就不用在项目(C/C++)的定义中填写

全部回复(3)
正序查看
倒序查看
2021-09-15 11:00

今天发现一个宏定义这块,去掉STM32F10X_MD,也可以正常编译

0
回复
2021-11-11 11:49
@lihui710884923
今天发现一个宏定义这块,去掉STM32F10X_MD,也可以正常编译[图片]

说明你的代码主要用的是HAL库的api,用hal库,就不需要定义这个宏。另外,个人习惯问题,建议这些宏最好直接在代码里定义,不然对一些不用MDK编程的小伙伴不够友好,也不利于版本管理。

0
回复
2021-11-18 10:04
@石工在线
说明你的代码主要用的是HAL库的api,用hal库,就不需要定义这个宏。另外,个人习惯问题,建议这些宏最好直接在代码里定义,不然对一些不用MDK编程的小伙伴不够友好,也不利于版本管理。

兄弟搞错了吧,hal库肯定需要的

0
回复