1. 编程规范对于新手来讲,编程规范以及代码架构也非常重要,有一个良好的编程规范和代码架构,可以提高开发效率,方便问题排查以及后续的程序维护。这里介绍的编程规范很简单,要求不严格。主要有以下几点
• 变量定义 变量定义时最好是能够体现该变量所属的外设模块,该变量是否为全局变量,静态变量或者指针变量。变量首字母小写,后面的单词首字母大写。举例如下// 以adc模块为例,需要定义一个存储ad值的变量,举例说明变量命名方式// 局部变量u32 advalue = 0;// 全局变量u32 gadcadvalue = 0; // 加一个g表示是全局变量// 全局静态变量static u32 gsadcadvalue = 0; // 加一个s表示静态变量// 指针变量u32 *gpadcadvalue = (u32*)0x2000800; // 加一个p表示为指针变量• 注释 函数注释举例如下/* *============================================================================== *函数名称: *函数功能: *输入参数: *返回值:无 *==============================================================================*/对于程序语句注释,如果过长可以在程序上方加注释,如果不是很长可以在程序语句后面空三格输入注释。
• 函数命名 函数命名要体现函数所属的层级以及函数的功能,关于层级会在代码架构的部分详细说明,这里只说一下函数命名方式。// 这里以adc模块的读取ad值函数为例,说明函数命名方式void med_adc_readadvalue (void){ // 函数内容}这里med指示该函数位于功能层,属于adc模块,作用是读取ad值。
• if,while等语句的使用 使用if或者while等语句时,需要在括号前面加一个空格,如下if (gadcadvalue == 0){ // 程序语句}• 四则运算 四则运算符号前后需要加空格,包括等于号等符号。如下c = a * b;2. 程序架构该程序架构是本人在工作期间学习的,个人感觉还是有助于提高开发效率,方便后续维护的。主要思想是将一个模块的程序分成三部分,每一部分是一个新建的文件夹,下面都是其他模块相同层级的文件。
• drv 驱动层 该层主要是写一些模块的初始化程序,例如gpio的初始化,adc的初始化等。
• med 功能层 该层主要是完成一些功能性的操作,比如读取ad值,点亮led等。med层的函数可以包含drv层的函数。
• app 业务层 该层主要是完成一些业务,比如在点亮led的基础上实现流水灯,比如显示电压值等。
四、stm32f103zet6简介stm32f103zet6是由意法半导体(st)生产的一款单片机,32指32位。stm32也可以成为32位微处理器。stm32f103zet6的主时钟频率为72mhz,512kb的flash,64kb的sram。常用到的有gpio,中断,adc,tmr,uart,dma等。
五、程序模板在使用keil5编程时,针对一个外设需要新建对应的.c和.h文件。这里以led模块为例,简单介绍一下本人的常用模板
.c文件
#include led.h // led头文件需要注意的是一定要空出来一格,否则编译会报警告。
文件最后未空一行的警告
.h文件
#ifndef _led_h#define _led_h#include sys.h // stm32库文件#endif.h文件最后也要空出一行,否则也会有警告。
新建完之后需要将这两个文件添加到工程中。
对于.c文件,右键工程文件夹,选择“manage project items”打开。
点击“add files”将新建的.c文件加入到对应的文件夹下。
添加.c文件
对于.h文件,点击魔术棒,选择“c/c++”,点击三个小点选择对应文件夹即可。
添加.h文件
六、st-link调试在开发过程中学会使用debug调试,能够帮助我们更快地定位问题。这里简单介绍一下利用st-link和普中核心板debug调试方法。
6.1 硬件连接首先将st-link与核心板连接起来,st-link的引脚如下
st-link引脚
核心板上并没有给st-link预留单独的接口,而是跟jtag一起。
其原理图和硬件图如下
jtag原理图
jtag硬件图
由原理图可知,st-link的“swclk”连接核心板的“jtck”,“swdio”连接核心板的“jtms”,“rst”接“reset”。
vcc不要接,接好st-link后再单独给核心板供电。
6.2 keil配置硬件连接好后开始配置keil5,关于st-link驱动的安装这里就不再做介绍了。
• 首先确定st-link驱动是否正常
确认st-link驱动是否安装正常
• 配置debug 点击魔术棒,选择debug,下图处选择“st-link debugger”。
debug配置
然后再点击“settings”,在“swio”右侧不显示“no target connected”就说明st-link连接正常。点击“flash download”
flash download
按照图示配置,“programming algorithm”只要选择符合芯片型号的即可,需要注意的是,只能保留一个。
flash download配置
按照下图配置“utilities”。
配置utilities
至此,keil5关于st-link的内容配置完成,如果小伙伴遇到其他问题,可以多去看一些大佬们的博客。
6.3 下载调试配置完上面的内容后就可以使用st-link进行下载调试了。下载的话比较简单,编译完成后直接点击下图标注的图标,等到下载完成即可。
下载程序
调试时点击下图所示按钮,进入debug调试。
调试按钮
下面简单介绍一下调试窗口中各个按钮的作用,其他更加详细的介绍需要小伙伴自行搜索,这里参考了这篇大佬的文章keil5中debug调试。
调试窗口按钮含义
第一部分从左到右
• 复位• 全速运行• 停止• 每点一次运行一行,遇到函数体会进入• 每点一次运行一行,遇到函数体不进入,直接执行完到下一行• 快速执行当前函数剩余语句,然后跳出该函数体,准备执行下一条• 直接运行到光标处第二部分从左到右
• 设置当前光标处为断点• 失能当前光标处断点• 失能全部断点• 删除全部断点打断点的方法比较简单,直接在想要打断点的一行左侧点击一下,出现一个红点就表示已经添加了断点。断点的作用是能够让程序运行到断点处停止,有助于我们分析函数运行方式以及变量的变化。
断点示意图
调试时可以查看某一个变量的值。选中想要查看的变量,右键
查看变量值
此时就会出现一个窗口,能够查看该变量的值。
查看变量值
Imagination 与 3Glasses 携手推动光线追踪技术在VR设备中的应用
深度学习未来发展的三种学习范式
基于dsPIC30F微处理器实现微恒离子流发生器的应用方案
热敏电阻和KTY传感器在电动机中起什么作用
d触发器的芯片介绍(74系列)
STM32速成笔记(1)概述
伺服系统可能出现的问题及解决办法
无源互调的理论和工程应用研究
三星将在2021年推出四款折叠屏手机
京东、天猫、唯品会被国家市场监管总局处罚 50 万元,释放出一个重要信号
免驱动即插即用HDMI转VGA转换器的介绍
MAX3669 低功耗622Mbps激光驱动器
今年在两会上有哪些关于物联网的议题呢?
诺基亚8什么时候上市?诺基亚8最新消息:诺基亚8前后双摄+6G+128G,诺基亚8价格3000+即将发布
探讨电子负载CC工作模式的原理及在各个领域的应用
爱立信、高通和Thales计划在地球轨道卫星网络上5G
一个数据结构-线段树
2019年是5G产业进入全面商用的关键一年
一文读懂开关电源中的共模电感
世上最小的数字湿度传感器-SHT21