几年前刚开始自学单片机时,购买了一套C51的开发板,跟着套件的例程逐渐入门,并用万能板焊接线路,用89C51成功地做出了超声波测距和点焊机控制等小项目。随着学习和应用的深入,C51系列的单片机性能已经远远不能满足需要,STM32系列以其丰富的引脚资源和高速的运算能力,自然而然就成了我的学习目标。这一次是买了一块STM32F103C8T6最小系统板,自己在万用板上扩展了LCD显示屏、LED灯、按键、拨码开关和AT24C02 EEPROM,就此踏进了STM32的世界。
这是自己焊接的扩展板正、反面
这是STM32F103C8T6最小系统板及LCD显示效果
众所周知,STM32与C51在编程上有着很大的区别,我刚开始看示例代码时,被一大堆的“GPIO”代码弄得晕头转向,对先打开端口时钟、再配置引脚、最后调用库函数操作引脚等这些基本步骤却茫茫然不知所措,从C51转到STM32确实不容易。 经过反复观看教学视频,同时上各论坛搜索相关的帖子,实在不懂就发帖求助,通过刻苦学习和反复调试后,先是能够按照自己的意愿点亮LED,其后LCD也顺利地显示出字符来,模拟I2C对EEPROM的读写也尝试成功,PB4引脚的复用功能也被打开,系统滴答(systick)也顺利启用,按键的轮询和中断使用等,总算进入了STM32的大门。在学习STM32的过程中,我还学会了使用逻辑分析仪去观察和分析时序,排查程序的BUG。
这是使用Keil5开发平台
这是使用逻辑分析仪分析LCD的驱动时序
去年末,我幸运地从EEworld论坛获得了一个评测STM32G071RB开发板的机会,尝试了从标准库到HAL库的转换过程。开始我以为都是STM32系列,程序移植应该很简单,可谁知在F103正常运行的代码移植到G071下面来却通不过,多次发帖求教之后,好不容易才让LCD显示出字符,接着调试flash也颇费周折,I2C也不能如愿启用。在此期间也多次在ST_STM32社区、21ic和EEworld等知名论坛上请教各位老师和搜索查找相关的资料。正当评测按计划执行时,天有不测风云,一桩意外事件中断了我的评测过程,持续近一个月没时间打开电脑。由于没能按时完成评测计划,开发板也就与我失之交臂,我恋恋不舍地退回了开发板,失去了继续了解G071的机会。
这是STM32G071RB开发板
这是利用自制的扩展板调试G071开发板驱动LCD
这次评测任务虽然没有完成,对G0系列的了解也仅仅停留在皮毛,但通过这次的评测过程,让我接触到STM32CubeMX这个优秀的配置工具,从而对引脚的功能分配和配置有了更深刻的了解。通过使用这个配置工具,可以更合理地分配各引脚的功能,防止产生冲突。通过这个配置工具生成完整的工程项目代码,可以大幅度地减少引脚配置等基础代码的编写工作,杜绝这些基础代码的书写错误或配置错误,减少程序调试时间。也就是说,我们可以不用去考虑如何在程序中配置引脚,只要在STM32CubeMX中安排好各引脚的功能以及设置好相应的参数之后,其余的时钟开启、引脚及参数配置等代码乃至整个工程项目,包括固件库等全由程序自动产生或下载,我们只要在这个项目的基础上添加用户代码就可以完成项目的建立,极大地提高了开发效率。
这是利用STM32CubeMX软件配置引脚
目前我仍在F103C8T6最小系统板上继续做实验,还准备去购置一块F103RCT6最小系统板,利用更多的引脚来同时实验TFT触摸屏、AD转换、无线传输等功能,为下一步的实际应用作好准备。总之,我现在已经是离不开STM32了,以后若还有STM32的评测机会时,还会尽量去争取,尤其是对新推出的MP系列和WB系列,还会努力去了解、去熟悉、去应用。最后借用李白的两句诗作为本文的结束:长风破浪会有时,直挂云帆济沧海。
|