其实STM32这种事情……

前不久和一个本科同校的学妹聊到过关于控制器这方面的问题,她说比较喜欢Arduino这样的,我说她比较会偷懒,可以尝试一下STM32这样的控制器,她说比较难!其实一开始我也认为是比较难的(在我没了解之前),我最先入手的应该是8051系列的单片机,说实话这个我都没学完,直到上这门课我才认真的学习了一下,继这之后是Arduino单片机,我也没用它做过什么有啥意义的东西,就是单纯的测一测代码,不过事实证明,确实好用,然后是K60系列32位控制器,这个功能也比较强势了,是在当时做比赛的时候用到的,再这之后就是STM32系列了,用的比较多的

实际上我也不能说全懂这些控制器,毕竟不是集成电路专业的,它的内核等等之类的什么我完全没有兴趣,我只要知道怎么用它就行了,简而言之就是用C语言去实现一些具体的功能,其实这里也有一个接口的概念,或者说是已经做好的硬件屏蔽相关,你想让一个IO口输出高低电平,其实从本质而言没有那么简单的

GPIO_SetBits(GPIOx,GPIO_Pin_x);

略去初始化,难道这一句代码就可以置位固定端口高电平输出了?实际当然可以,但是为什么需要那样初始化?为什么需要配置端口时钟?输入输出方式?诸如此类等等?说实话深层次的需要研究内部的寄存器电路等详细的内部硬件设计构造,我也不知道,因为代码看得多了,问题遇见的多了,经验也就逐渐积累的多了吧,我知道它就是这样工作的,我写特定的代码通过特定的开发环境作出系列的处理再将程序固化到Flash里面就行,它就照我的逻辑工作就好了

如果深究的话,那么为什么需要这样的开发环境?编译之后生成啥文件?JTAG怎么实现程序的在线调试?SWD模式又是如何将程序烧入Flash的?我为什么这样写代码?我的逻辑为何正确?程序是怎样执行的?不应该是内核执行程序,为何又需要Flash?没完没了,知道一点就好“约定俗成”

再说怎么样才是入门呢?有的教程说,利用STM32点亮一个LED灯就算入门了,实际上要看具体的评价标准了,因为用STM32点亮一个LED,代码确实不需要多少,但是前期的工程配置对一个新手来说还是需要搜一波教程的,有点小繁琐,但是熟练之后也就很快了,但我个人认为即使成功的点亮了一个LED应该不能算是入门!至少得实现一个小的实践项目!我的话应该是我的第一个STM32实现的小项目了

DHT11测温并通过OLED显示

现在觉得这个不难了,因为代码基本烂熟于心了,包括DHT11这款传感器的具体的时序我都研究过了,怎么样能保证准确的读出数据,可能的问题出在哪,数据有错误与否及其解决方法等等,基本都了然于心,这应该算是入门吧,因为这里面的东西还是挺多的!别看它只是一个读温湿度小项目,涵盖的模块数一下基本够你学一段时间了

【1】IO口电平输入输出问题(输出电平驱动,输入电平读取),首先需要知道怎样输出高低电平(普通输出模式下输出高低电平在初始化后改变电平就是一句代码的事),读取输入的高低电平在初始化配置完后也是一句话的事情,改变端口的模式(输入还是输出也是一句话的事)

【2】Timer定时器,因为传感器多涉及时序问题,此时,定时器就必不可少了,延时也好、计数也好都缺不了,在这个项目里定时器的首要作用就是配合IO口驱动DHT11并获取温湿度的值,实际上会了这两个基本的模块,根据DHT11的时序就可以尝试一波自己写一个读取温湿度值的程序了,足够!

【3】USART,假设已经完全理解了上面的两个模块,并成功的将温度数据采集出来了(此时的温度信息自然是存在变量里面,调试是可以查看一波变量值的,不过很不直观,更不方便),要想把信息发送出来,串口就必不可少(实际上可以把它固化一波,后期用到时直接调用就行),如何利用既有的库函数整一个自己的字符发送函数就是需要自己设计的的了,想怎么设计都行,凭自己开心,我就是,写代码照我自己的风格(菠萝吹雪风格!!!)

会用就行,熟悉一些常用的模块(不需要全都学,因为不用的话很快就忘了),所以我个人比较反感一上来就全面的学一遍,没用,相信学完你也不知道一些具体的模块是咋回事,所以对准学几个常用的模块,学会而且学精!应用时能够快速上手,快速自行设计,完成自己想要的功能,一些不常用的,用到的时候再去学习即可!

发表评论

电子邮件地址不会被公开。 必填项已用*标注