有关STM32外设配置的几个常见问题

发布者:悠闲之旅最新更新时间:2019-02-14 来源: eefocus关键字:STM32  外设配置 手机看文章 扫描二维码
随时随地手机看文章

在做STM32开发应用的过程中,常常会遇到这样那样的问题,其中相当部分问题是与各外设及相关GPIO的配置有关的。就这方面的问题,这里一起总结交流下。


目前的STM32芯片是基于ARM内核的可编程微处理器,我们可以简单地把内核以外的东西统称为外设,比方 TIMER、UART、SPI、USB、I2C、存储器等功能模块。以32F427芯片功能框图为例,那些红圈上的都是。

 


好,我们直接切入主题。围绕外设的配置,我们遇到的问题,大致可以分为两大类。


一、时钟问题,就这方面的问题又可以细分为几小点。


1.1 时钟没打开就使用。


这个不难理解,就是相关外设的时钟没有打开。比如UART5的时钟没有打开,SPI的时钟没打开等,自然操作不了或没反应。


1.2 时钟因为总线的判断错误而开错了时钟。简单点说是张冠李戴了。


这个之前经常有人发生。比如类似USART1与USART2、SP1与SP2、TIM1与


TIM2可能并不在同一总线上,配置时以为一样,结果出了问题。


1.3 时钟数率配置错误。


这点跟第2点似乎有些交叉,这里主要是指因为时钟数据配置错误导致供给外设的时钟过高导致异常。曾经就有人因给32F1系列芯片的USB配置时钟时因高于48M,使其性能极不稳定而抓狂。


1.4 复用时钟没打开,即AFIO时钟没打开。


前面三点都没问题,配置正确无误,有些功能必须打开复用时钟,结果不知或忘记打开。说AFIO时钟主要是针对STM32F1系列的芯片。这点后面还会继续补充陈述。


二、GPIO管脚物理安排及配置问题,这个也可以细分两类。


2.1 管脚复用时出现了竞争冲突,即某个或某几个管脚同时分配给了2个外设来使用。


某工程师在使用STM32F103V的芯片时,同时用到两个I2C,结果发现总是I2C2工作正常,而I2C1工作不正常。时钟、脚位本身配置都没有问题。后来,发现他启用了相关FSMC的功能,其中FSMC有个功能脚刚好与I2C1的SDA 脚冲突了。


2.2 需要重映射的脚位没进行REMAP操作。


对于STM32F1系列需要重映射的功能脚,数据手册里会在REMAP栏标注出来。




比如上图中的USART_TX/RX的功能必须执行相关REMAP指令后才能在PB6/7是体现相关功能。记住还要打开GPIOB的时钟和USART1的时钟。


2.3 接着1.4的话题多说几句。


前面1.4提到了AFIO时钟问题。AFIO时钟只是在STM32F1系列里被提及。对于32F1系列,涉及到管脚的EXTI、REMAP、事件输出时就需要开启AFIO时钟。比方上面提到的管脚REMAP,必须先开AFIO时钟。配置EXTI中断也是一样,否则不生效。


对于STM32F1以外的其它STM32系列,不再提AFIO,多了个SYSCFG【系统控制器】外设,其功能跟F1的AFIO 有些类似但有差异,主要管理内存空间的映射、与EXTI中断源有关的IO配置以及其它配置等事务,不同32系列间还各有细小差异。


如果不打开SYSCFG时钟,有关内存空间重映射、与EXTI配置的操作就会无效。




/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


对于STM32F1以外的其它系列的管脚复用安排,跟F1也有所不同,它给出了专门的管脚功能复用寄存器及各个脚可能担当的复用功能之映射表, 不再单纯提管脚的REMAP及AFIO时钟。若想把某些脚做什么用,结合参考手册中GPIOx_AFR.寄存器与数据手册上的复用功能映射表查表配置即可。

 

下面表格是STM32F207芯片的复用功能表。其中的PA2/PA3可以根据不同复用功能需要做不同的选择。如果作为USART2的TX/RX,就选择AF7,AF7就对应到相应GPIO复用功能寄存器的配置位。这里它用GPIOA的低8位的口线,则在GPIOA_AFRL寄存器里进行配置。将0x0111分别写入AFRL2、AFRL3即可。当然,如果使用STMCU的官方库代码的话,操作也还比较直观。贴图下面的示例代码只是用来辅助说明话题而已。




/* Enable GPIO clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA , ENABLE);

/* Enable USART clock */

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

/* Connect USART TX/RX pins to AF7 */

GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_7);


这里顺便提下,GPIO_PinSource2 与 GPIO_Pin_2在ST官方库代码里定义是不一样的,有时候有人把这两个也搞混而出错。他们的定义如下,一个是侧重表示管脚在端口上的位置,一个侧重表示管脚在端口上的序号。


#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */

#define GPIO_PinSource2 ((uint8_t)0x02)

 

小结下,上面提到的问题,当工程师基于ST官方固件库或自行建立工程进行开发的情形下可能会发生的比较多。可喜的是,ST官方有推出一个STM32CUBE的配置工具,该工具在处理STM32 MCU的管脚安排、时钟配置方面非常方便,可以回避很多因为管脚或时钟理解上的误会、视觉上的疏忽而导致的困扰和麻烦,建议尽量使用该工具做辅助开发。



关键字:STM32  外设配置 引用地址:有关STM32外设配置的几个常见问题

上一篇:关于STM32串口空闲中断的问题
下一篇:stm32f103c8t6掉坑记

推荐阅读最新更新时间:2024-03-16 16:24

AD1256之STM32程序——STM32测试高精度ADC篇(四)
1.ADS1256概述 ADS1256是TI(TexasInstruments)公司推出的一款低噪声高分辨率的24位Sigma-Delta(E-v)模数转换器(ADC)。E-vADC与传统的逐次逼近型和积分型ADC相比有转换误差小而价格低廉的优点,但由于受带宽和有效采样率的限制,E-vADC不适用于高频数据采集的场合。该款ADS1256可适合于采集最高频率只有几千赫兹的模拟数据的系统中,数据输出速率最高可为30K采样点/秒(SPS),4路差分与8路伪差分输入,有完善的自校正和系统校正系统,SPI串行数据传输接口。本文结合笔者自己的应用经验,对该ADC的基本原理以及应用做简要介绍。 ADS1256性价比很高,是TI公司24位
[单片机]
AD1256之<font color='red'>STM32</font>程序——<font color='red'>STM32</font>测试高精度ADC篇(四)
基于STM32的多色温多星等输出的单星模拟器设计
随着近年来我国空间科学技术的快速发展,卫星、载人飞船等航天器需要更高的控制精度、可靠性和更长的寿命。星敏感器在各种航天器上大量应用,其性能指标直接影响到测量结果的可信度。单星模拟器是星敏感器的主要地面标定设备之一,所要实现的功能是在实验室内提供与单颗真实恒星在光度特性、光谱特性等方面趋于一致的模拟恒星 。传统单星模拟器大多体积大,精度低,稳定性不够好,可调节色温单一,实现星等范围小 。本项目采用模块化设计,将多束不同窄带光谱、不同强度的光线混合,并控制总体输出光强,最终实现不同等效黑体色温和不同星等。 1 结构设计 如图1 所示,单星模拟器系统总体结构由 电源 、光源、波段光强控制器、积分球、星等控制器、工控箱、P
[单片机]
基于<font color='red'>STM32</font>的多色温多星等输出的单星模拟器设计
STM32的backtrace深度讲解(cortex-m的栈布局与栈回溯的原理和方案)
1.说明 2.cortex-m上的栈布局 2.1 cortex-m上的寄存器 2.2 cortex-m上的自动压栈 2.3 cortex-m上的函数执行流程 3.cmbacktrace原理分析 3.1 问题分析 4.实际应用 5.总结 1.说明 对于一个嵌入式产品的开发流程来说,一般都需要经过如下几个阶段: 1.方案预研 2.产品功能设计 3.开发调试 4.工厂测试 5.产品上线售后 一般来说,1,2,3板子都是在开发者手上,一旦遇到bug,只要可以复现,基本上都可以排查出来,然后修复或者规避。但一旦进入到4,5阶段,产品已经成型之后,再想排查BUG就比较麻烦了。例如工厂测试阶段,有可能连续运行好几天或
[单片机]
<font color='red'>STM32</font>的backtrace深度讲解(cortex-m的栈布局与栈回溯的原理和方案)
STM32:STM32学习记录1:MDK基本数据类型及代码优化
大概一年前开始接触STM32,当时就被它的库函数开发所吸引,但是迫于各种压力放弃了学习,一直在使用所谓稳定的单片机来开发(忍不住要吐槽),现在终于有时间了,开始自己的兴趣之旅喽!! 现在网上有各种大牛的经验文档使我受益匪浅,也感谢室友的无私帮助!!! 大概看了一下大牛的经验文档,好像没有一个提到MDK的基本数据类型的,自己找找看在MDK的帮助里面有。 打开MDK----- help---- uVision help ---- RealView Compiler Reference Guide ---- C and C++ implementation details ---- C and C++ implementat
[单片机]
<font color='red'>STM32</font>:<font color='red'>STM32</font>学习记录1:MDK基本数据类型及代码优化
STM32单片机的中断机制
这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。 图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断“挂起请求寄存器”,最后经过编号4的与门输出到NVIC中断控制器;在这个通道上有4个控制选项,外部的信号首先经过边沿检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了。 接下来
[单片机]
<font color='red'>STM32</font>单片机的中断机制
stm32学习笔记(一)点亮LED
#include stm32f10x.h #include delay.h void Delay(u32 count) { u32 i=0; for(;i count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA delay_init(); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-- PA.8 端口配置 GPIO_Ini
[单片机]
<font color='red'>stm32</font>学习笔记(一)点亮LED
高集成度编程工具软件STM32代码烧录编程实战
凡用过STM32的用户应该知道,当你完成程序调试后,想对STM32芯片进行程序代码烧录编程的话可以有多种方式。若通过调试接口【JTAG/SWD】来烧写程序,一般要使用STVP或STLinkUtility工具软件来完成;若通过UART接口来烧写程序,往往要下载个基于PC 端的flash烧录工具软件STM32 Flash loader demo配合;若通过USB接口来烧写程序,往往需下载DfuSe USB 固件升级工具软件来实现。如今ST推出了新的高集成度编程工具软件STM32CubeProgrammer,以后就不用这么麻烦了,因为它同时支持上述三类编程接口,而且还兼具其它功能。 一、STM32CubeProgrammer具备如下
[单片机]
高集成度编程工具软件<font color='red'>STM32</font>代码烧录编程实战
STM32触摸按键原理和电路设计
01触摸按键原理 触摸使用RC充放电原理: RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用的电路。 充电过程: 电源通过电阻给电容充电,由于一开始电容两端的电压为0,所以电压的电压都在电阻上,这时电流大,充电速度快。随着电容两端电压的上升,电阻两端的电压下降,电流也随之减小,充电速度小。充电的速度与电阻和电容的大小有关。电阻R越大,充电越慢,电容C越大,充电越慢。衡量充电速度的常数t(tao)=RC。 放电过程: 电容C通过电阻R放电,由于电容刚开始放电时电压为E,放电电流I=E/R,该电流很大,所以放电速度很快。随着电容不断的放电,电容的电压也随着下降。电流也很快减小。电容的放电速度与RC有关,R的阻值
[单片机]
<font color='red'>STM32</font>触摸按键原理和电路设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved