在vscode开发stm32,以及HAL_Delay死循环和定时不准的问题

个人博客链接

环境

板子:某宝上买的stm32F103c8t6最小系统板,10块左右的价格
vscode: 安装有cpp等插件,最重要的是安装 PlatformIO IDE插件,非常好用,可以直接选择数百款开发版新建工程,自动下载编译、调试工具和各种库文件,配置好cpp补全等。还有具体项目例子以供参考,非常好用。

步骤

1、vscode安装PlatformIO IDE插件,可以直接搜索stm找到这个插件。。。安装好后在此插件选项选择重新载入,或者手动重启vscode。
2、等待PlatformIO IDE安装好PlatformIO Core,然后可以打开一个文件夹,可以通过命令ctrl+shift+p搜索插件命令,选择PlatformIO:home命令,一般不用命令,打开文件夹自动启动插件主页面。在主页面选择新建工程,选择板子,只需选择对自己芯片的就好,然后等待安装好各种工具和依赖。
3、修改platformio.ini文件,如果使用stlink作为下载和debug的话增加一行debug_tool=stlink
4、在src文件夹下新建c文件,开始写源码。
5、点击底部栏的几个选项可以 debug、build、下载这些。

遇到问题

没用过stm32的HAL库,但这个库非常好,因为它提供比较抽象的API,也就不用自己总是去查芯片手册了,不用再鸟寄存器操作这些了,而且基本各个芯片都通用。

没有用过那怎么办呢?

正如前面提到的那样,ctrl+shift+n新建窗口,在PlatformIO主页面打开项目例子,参考(照搬)就行。

嗯,身为一个有四有青年决不能一字不漏地照抄,所以我只抄了一部分,发现HAL_Delay()毫秒定时函数直接陷入死循环,好吧,真香,还得把系统时钟ms定时中断处理函数抄上

咳咳。。。我非常严谨地参考(一字不漏地抄袭)例子后,发现仍有问题,给出的是led定时闪烁的例子,烧录后发现定时非常不正确,然后Google了大半天都没找到答案,然后找HAL的数据手册查,没有发现问题,调试也没发现,后来查看HAL_Init()函数里面初始化系统时钟定时1ms的中断那里发现了问题,原来它是直接引用全局变量SystemCoreClock进行换算得到时间的,但我好像并未发现SystemCoreClock的初始化,麻蛋,然后我在HAL_Init()之前先调用SystemCoreClockUpdate(),完事了!!!

个人博客链接

你可能感兴趣的:(stm32)