首页 > 代码库 > STM32F103频率和AD采集项目总结

STM32F103频率和AD采集项目总结

刚刚做了我的第一个嵌入式项目----基于STM32F103的频率和AD采集系统。

是一个大系统的一个部分,没用操作系统,使用库函数编写,虽然东西很简单,但是对于我这个还没入门的菜鸟来说还是有点难度的。前后断断续续已经两周多了,到目前为止系统已经完成了接近90%,在这个过程中犯了很多错误,也走了很多的弯路,在这里记录下来,让自己以后不要再犯同样的错误,也给那些和我一样刚入门的朋友一点提示。


1、USART初始化问题:

STM32F103启动文件默认有两个入口,一个是systemInit(),另一个是main(),其中systemInit默认是用户编写的软件初始化部分。

开始时我把时钟、GPIO、USART、定时器、EXTI、NVIC、ADC的初始化都放在了systemInit函数中,可是在测试中却发现USART初始化不成功。USART端口初始化成功的话默认为高电平,而在实际测试中却发现USART端口为低电平,第二次初始化却能成功初始化,这个问题困扰了我N天的时间。串口初始化不成功,后面的程序就无法进行。


错误原因:我在main函数中定义了几个全局变量,用于在中断中作为标记使用(中断中尽量不要放太多程序,最好只做一个标记,处理程序放到主程序中来完成)。

我把中断的初始化放在了systemInit函数中,在初始化过程中中断比mian初始化要早,但全局变量的定义都是在main中,所以导致了中断初始化失败,进而导致后面的程序初始化失败。而在第二次运行时,因为第一次已经给main中的变量分配空间,所以中断以及后面的程序都能成功运行。


错误处理:将除了时钟以外的模块都放入main中初始化,这样就保证了main中的全局变量能够成功分配空间。

(一定记住这个血淋淋的教训,还因此被老师很很鄙视了一番。。。)


/**************************************************未完待续**************************************************************/