大家好!本次给大家分享的基于N32固件库的最小系统实现。本人多年前毕业于自动化专业,习惯了当年从零开始搭建软、硬件环境的过程。虽然损失了一些研发时间,但也可以保证系统在出现bug后可以快速定位,也确实会精简系统的工程文件复杂度。(P.S.有人可能会问:为什么不使用寄存器方式,那样会更加节省flash容量?确实会更节省,但固件库对阅读代码非常有帮助,也降低了一些基础知识学习成本,节省了部分阅读datasheet的时间。在Code Review时更容易发现潜在的bug点)
我们言归正传,何为最小系统?答曰:仅包含系统主时钟配置,GPIO操作LED指示灯与Systick时基的软件代码实现与工程。
我们先上几段代码,然后,再讲为什么是这三个部分:
“代码不多”“结构清晰完整”等等夸赞之词吧!(此处应该有掌声!)掌声过后,我们来看看为什么选中这三个部分。
- 时钟配置,这是MCU的“心脏”。只有心脏正常,频率正常,我们的系统才会健壮地运行。时钟配置也是MCU在复位后第一个要做的事情。如果时钟不稳定,那么我们后面在调试通讯外设接口,如串口,CAN口,IIC接口,没有时钟基准,调试完成简直无从谈起。
- GPIO的LED指示灯。这个好理解,系统状态指示灯嘛!电子信号对于我们来说,是看不见,摸不着的。有人说,示波器可以的呀!示波器就是电子工程师的眼睛!错倒是没有错,但每次对于基本的,简单的调试也都要放置一个示波器的探针在评估板上是不是也是有点多余——影响开发效率,而LED指示灯就可以完美解决这个矛盾。LED灯可以闪烁,可以快闪,也可以常亮。我通常会将程序正常运行状态以LED灯慢闪所表示;当检测到某个外设,或者配置,或者返回值异常情况时,则通过快闪以警示;当程序跑飞,进入faulthandler后,则以常亮标识。这样一顿操作下来,不用请出来昂贵的示波器,轻松完成MCU系统状态的读取。
- systick定时器,1ms时基产生。systick本身其来源于ARM公司在Cortex-M系列里对RTOS所设计的一个简单、朴素的定时器,朴素到仅在初始化时,配置一次时间周期参数即可,不需要每次清除中断标志,也不用重复填充计数器的匹配值等干预。另外,我也考虑到未来会在项目中应用FreeRTOS,所以使用systick产生时基,实现软件计数,再配上每秒LED灯一亮一灭,我们便通过肉眼就可以直接判断软件、时钟初始化是否运行正常了。
P.S. 这里必须要提示一下大家。N32的MCU的设计中,systick的时钟源输入不可选择8分频方式,原因不明,切记不要配置分频即可。
编译完成,连接jlink,将代码烧录N32G455就可以看到LED指示灯每秒1Hz的频率一闪一闪的了。图片就先不上了,动图还没有学会,传个视频也不值当的。嘿嘿~~
本次分享就到这里了,喜欢的小伙伴们欢迎回复。下一期《完成基于串口的调试输入输出》敬请期待!
|
此文章已获得独家原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。