分享

STM32开发经验、Keil使用技巧与注意事项整理

 xpxys99 2019-09-06

STM32命名规则

STM32开发板容量

BOOT设置

平时运行程序时默认设置BOOT0为0,BOOT1为0;若要用串口下载代码,则需要设置BOOT0为1、BOOT1为0,下载完后改为默认状态;

供电电源

开发板采用5V供电,请勿同时使用USB和凤凰端子供电。

外接扩展板时,需确保:

  1. 扩展板的VCC和GND之间没有短路;
  2. 扩展板和开发板之间的VCC是否对应。

USB仿真器

  1. 不能带电拔插USB仿真器;
  2. 上电时,先插仿真器,后给开发板供电;
  3. 掉电时,先断开开发板电源,再拔掉仿真器;
  4. 仿真器操作不当,会烧坏开发板芯片,甚至烧坏电脑主板的USB接口芯片。

IO口

  • 输入(IN)
  1. 输入电压范围:高(1)——0V,低(0)——3.3V;有些开发板的IO口可容忍5V,须查看对应的芯片说明手册。
  2. 如果电压不能保证在3.3V,采用3V稳压管(注意限流电阻的选择)
  • 输出(OUT)
  1. 输出电压范围:高(1)——0V,低(0)——3.3V;
  2. 注意负载的影响:

-如果涉及强电(继电器)的控制,采用光电隔离;

-负载大(需求电流大)时,需加缓冲。

c.用作ADC输入时,保证输入的模拟信号电平不超过3V,否则会烧坏开发板。

  • 电平
  1. 当不知道某个IO口的电平时,可以用电压表连接IO口和GND进行测量;或者连一个LED灯看他的亮灭。
  2. 当需要测试IO口脉冲频率时候(如PWM),也可以用LED灯测试;但当频率很高以至于LED不能辨别时,可以通过逻辑分析仪测试。
  • 串口
  1. 串口(COM)被占用

当打开串口的时候,有时会提示“无法打开串口”,“串口被占用”,“串口资源不存在”等信息。

这些信息提示要使用的串口已经被其他进程占用,可以到计算机的设备管理器中进行查看

当知道这个进程是什么,可以到任务管理器中进行关闭;

当不知道这个串口被什么进程占用的时候,就需要从注册表处理;

在“开始菜单”中的“运行”中输入regedit,然后点“确定”,打开注册表编辑器。

按照下图中的路径找到COM Name Arbiter。然后在右侧“ComDb”上点“右键”选择“删除”。删除掉注册表的这个项目是让win7系统重新构建COM端口的列表,这样就可以改掉那些端口被占用的状态。

2. 发送测试数据,接收端丢失第一个数据

硬件复位后,串口发送首个数据之前,先读取一下USART_SR,则能够保证首个数据发送时,不出现覆盖的情况。当然,也有别的方法,比如先清除TC状态位,或是在write USART_DR之后,加入一个小延时,让数据发送完毕,应该也能间接排除这个错误。

开发板使用

1、尽量使用合适的保护盒盛装,不要直接使用裸板,容易损坏元件、造成短路等;

2、确定开发板工作电压、工作电流,确定外设版本与接口类型,确定串口工作电平等;

3、常见工作电压为:5V,7.2V,9V,12V,15V等,通常为5V;

4、常见串口工作电平:1.8V,3.3V,5V,通常为3.3V,个别开发板串口工作电平1.8v且与芯片直连,容易烧坏;

5、常见工作电流为500mA,1A,2A,4A几个级别;

6、常见的显示接口为HDMI,microHDMI,displayport;

7、根据开发板工作需要,判断散热情况,适当的为主芯片安装散热片、散热风扇;

8、不要超频工作;

9、不要用手直接抓上电的开发板。

10、不要长时间让开发板供电,有些板卡散热做的不好,要注意触摸主芯片有没有过热现象。

11、B3、B4、A15默认为JTAG引脚;A13、A14默认为SWD引脚。可使用GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST,ENABLE)开启SWD而关闭JTAG功能,或用写寄存器的方式,SWG_CFG[2.0]写入000;

12、1个 USB 供电最多500mA,且由于导线电阻存在,供到开发板的电压一般都不会有5V,如果使用了很多大负载外,比设比4.3 寸屏、7寸屏、网络摄像头模块等,那么可能引起 USB 供电不够,所以如果是使用 4.3 4.3屏/7 寸屏,或者同时用到多个模块的时候, 建议大家使用一个独立电源供电。如果没有独立电源,建议可以同时插 2个 USB 口,并插上 JTAG,这样供电可以更足一些。

烧芯片情况,主要是静电原因:

1、接入电脑 USB时烧了。电脑USB口带静电,然后接入到核心板,用手拿着核心板,容易导致烧掉核心板,尤其是身体碰到金属和地的时候。尽量不要用手直接拿核心板,身体不要碰到地面(穿鞋子)。

2、用开发板做智能车,小车跑的过程中烧了。车轮与赛道摩擦的过程中使得小车带电,把电引到核心板就会烧了核心板。可以用锡纸包住车底盘来隔离保护核心板。铜屑等金属碰到芯片的管脚短路,建议用黑胶布包着核心板上的主芯片。小车跑的过程中碰撞,容易导致短路,导致核心板烧了。对于露出金属表面的电路都尽量用黑胶布包紧。电机刹车加速导致产生反冲电流,如果IO口没经过隔离保护而直接接入电机驱动模块,就容易出现烧芯片情况。建议IO口经过隔离保护电路后才接入电机驱动模块。舵机也是如此,要进行隔离(舵机内部也是电机)。

3、超频使用。超频其实是对单片机损耗很大的,虽然可以提供性能,但也更容易烧坏。频率一般求稳定,不建议设置最高极限频率。环境温度高时候,如果超频过高,导致发热偏大,容易导致芯片烧掉的。可以考虑安装散热片和降低频率

4、电源管脚短路或者电源电压拉低,芯片发热。这是芯片内部的电源模块损坏导致的。一般换个芯片就可以解决。

5、切记不要GPIO配置输出高电平,然后硬件又接地这种类似的短路。非常容易烧板子的!不要以为程序就不会烧板子。

6、单片机出现芯片发热,但可下载程序,可运行程序。这是芯片内部的电源模块损坏导致的,加大3.3V和GDN之间的电容,可减少发热,但最好是换个芯片。

芯片烧坏,只能从步骤,实验结果,推测原因。

程序调试

  • 有两种仿真模式:
  1. 模拟仿真——MDK内部仿真,需要设置一下才可使用。

蓝色箭头处可直接照填,橙色箭头处填你所用的开发板型号。

2. 在线调试——连接好板子,可在线调试。

  • PWM波有毛刺,但把预分频系数调成199以下就没有这种现象发生,这种是过冲(振铃现象),串联电阻,就可以解决。
  • 串口调试
  1. 程序和串口调试工具的波特率必须要一致,否则无法接收数据、或接收不正确。
  2. 在用到“复用重映射”的时候要先使能AFIO的时钟

RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE);

其次是

GPIO_PinRemapConfig(GPIO_FullRemap_USARTx, ENABLE);

x可以是1、2、3等的串口号。

最后是开时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE)

MDK(Keil)使用技巧

1. 快速找到函数定义

在阅读代码时,为了要知道某个函数所实现的功能以及其他具体的情况,往往需要查看某一个函数的定义。首先,我们的光标要选中该函数,再按下快捷键【F12】然后就可以跳到函数的定义处了;或者单击右键,然后在弹出来的快捷菜单中选择“Go To Definition Of ‘xxx’”(“xxx”为我们选中的函数名)。

2. 批量注释和批量取消注释

在编写函数的过程中,往往避免不了出现各种各样的问题,出问题时在调试的过程中需要注释一些代码和对一些代码进行取消之前的注释,以此来对代码进行测试和完善。

3. 整段缩进

选中整段后,按table键即可一起缩进;整段反向缩进,按shift+table。

4. 用户自定义关键字

进入User Keywords 选项卡,C/C++ Editor Files,在右边的 User Keywords 对话框下面输入自己定义的关键字:

5. 语法检测和代码提示

keil MDK5 支持代码提示与动态语法检测功能,打开配置对话框,选择 Text Completion 选项卡。

Strut/Class Members,用于开启结构体/类成员提示功能。

Function Parameters,用于开启函数参数提示功能。

Symbols after xx characters,用于开启代码提示功能。

Dynamic Syntax Checking,则用于开启动态语法检测。

6. 代码补全

可以在configuration(配置项)的Editor(编辑器)选项卡里设置汉语字符编码GB23132,保证复制出来的汉语注释不会乱码,此外,可以在User Keywords(用户自定义关键字)选项卡设置自己常用的关键字,Shortcut Keys(快捷键)设置符合自己使用习惯的快捷键,尤其是Text Completion(代码补全)非常实用。

Show Code Completion List for (代码自动补全列表)

struct/class Members (结构体/类成员)

Function Parameters (函数参数列表)

Symbols after 4 Characters

ENTER/TAB all fill-up character (enter/tab键自动补全)

Dynamic syntax Checking (动态语法检查)

Enable (打开)(此选项会导致误报,只要编译通过便可不予理会)

STM32工程目录下面的组以及重要文件讲解

1.组 USER 下面存放的主要是用户代码。system_stm32f10x.c 里面主要是系统时钟初始化函数 SystemInit 相关的定义,一般情况下文件用户不需要修改。 stm32f10x_it.c 里面存放的是部分中断服务函数,main.c函数主要存放的是主函数。

2.组 HARDWARE 下面存放的是每个实验的外设驱动代码,他的实现是通过调用 FWLib下面的固件库文件实现的,比如 led.c 里面调用 stm32f10x_gpio.c 里面的函数对 led 进行初始化。

3.组 SYSTEM 是 ALIENTEK 提供的共用代码, 包含 Systick 延时函数, IO 口位带操作以及串口相关函数

4.组 CORE 下面存放的是固件库必须的核心文件和启动文件。这里面的文件用户不需要修

改。

5.组 FWLib 下面存放的是 ST 官方提供的外设驱动固件库文件,这些文件大家可以根据工程需要来添加和删除。每个 stm32f10x_ppp.c 源文件对应一个 stm32f10x_ppp.h 头文件

6.README 分组主要就是添加了 README.TXT 说明文件,对实验操作进行相关说明

STM32 的 IO 口可以由软件配置成 8 种模式

1、 输入浮空

2、 输入上拉

3、 输入下拉

4、 模拟输入

5、 开漏输出

6、 推挽输出

7、 推挽式复用功能

8、 开漏复用功能

每个 IO 端口都有 7 个寄存器来控制,每个寄存器的详细使用方法,可以参考《STM32 中文参考手册 V10》 P105~P129。

每个 IO 口可以自由编程, 但 IO 口寄存器必须要按 32 位字被访问

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多