历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2020年02月07日 | STM32单片机的复用端口初始化的步骤及方法

2020-02-07 来源:elecfans

STM32有好几个串口。比如说STM32F103ZET6有5个串口,串口1的引脚对应的IO为PA9,PA10.PA9,PA10默认功能是GPIO,所以当PA9,PA10引脚作为串口1的TX,RX引脚使用的时候,那就是端口复用。


复用端口初始化有几个步骤:

1) GPIO端口时钟使能。要使用到端口复用,当然要使能端口的时钟了。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

2) 复用的外设时钟使能。比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

3) 端口模式配置。 在IO复用位内置外设功能引脚的时候,必须设置GPIO端口的模式,至于在复用功能下GPIO的模式是怎么对应的,这个可以查看手册。

所以,我们在使用复用功能的是时候,最少要使能2个时钟:

1) GPIO时钟使能 ;2) 复用的外设时钟使能 同时要初始化GPIO以及复用外设功能

串口设置的一般步骤可以总结为如下几个步骤:

1) 串口时钟使能,GPIO时钟使能

2) 串口复位

3) GPIO端口模式设置

4) 串口参数初始化

5) 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

6) 使能串口

7) 编写中断处理函数


端口重映射:(暂略)

中断量控制:

STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这68个可屏蔽中断,但是STM32的68个可屏蔽中断,在STM32F103系列上面,又只有60个(在107系列才有68个)。


ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。

ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。

ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。

ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。

IABR[2]:全称是:Active Bit Registers,是一个中断激活标志位寄存器组。

IPR[15]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。

简单介绍一下STM32的中断分组:STM32将中断分为5个组,组0~4。该分组的设置是由SCB-》AIRCR寄存器的bit10~8来定义的。

STM32单片机的复用端口初始化的步骤及方法

通过这个表,我们就可以清楚的看到组0~4对应的配置关系,例如组设置为3,那么此时所有的60个中断,每个中断的中断优先寄存器的高四位中的最高3位是抢占优先级,低1位是响应优先级。每个中断,你可以设置抢占优先级为0~7,响应优先级为1或0。抢占优先级的级别高于响应优先级。而数值越小所代表的优先级就越高。


STM32的中断如此之多,配置起来并不容易,因此,我们需要一个强大而方便的中断控制器NVIC (Nested Vectored Interrupt Controller)。NVIC是属于Cortex内核的器件,不可屏蔽中断 (NMI)和外部中断都由它来处理,而SYSTICK不是由NVIC来控制的。


使用NVIC来配置中断时,自然想到ST库肯定也已经把它封装成库函数了。对NVIC初始化NVIC_Init() 函数,首先要定义并填充一个NVIC_InitTypeDef 类型的结构体。


这个结构体有四个成员:

NVIC_IRQChannel 需要配置的中断向量;

NVIC_IRQChannelCmd 使能或关闭相应中断向量的中断响应;

NVIC_IRQChannelPreempTIonPriority 配置相应中断向量抢占优先级;

NVIC_IRQChannelSubPriority 配置相应中断向量的响应优先级;

首先要用NVIC_IRQChannel参数来选择将要配置的中断向量,用NVIC_IRQChannelCmd参数来进行使能(ENABLE)或关闭(DISABLE)该中断。在NVIC_IRQChannelPreempTIonPriority成员要配置中断向量的抢占优先级,在NVIC_IRQChannelSubPriority需要配置中断向量的响应优先级。


抢占优先级和响应优先级

STM32的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。


抢占,是指打断其它中断的属性,即因为具有这个属性,会出现嵌套中断(在执行中断服务函数A的过程中被中断B打断,执行完中断服务函数B再继续执行中断服务函数A),抢占属性由NVIC_IRQChannelPreempTIonPriority的参数配置。


而响应属性则应用在抢占属性相同的情况下,当两个中断向量的抢占优先级相同时,如果两个中断同时到达,则先处理响应优先级高的中断,响应属性由NVIC_IRQChannelSubPriority的参数配置。


例如:现在有三个中断向量:

中断向量 抢占优先级 响应优先级

A    0     0

B   1      0

C   1 1

若内核正在执行C的中断服务函数,则它能被抢占优先级更高的中断A打断,由于B和C的抢占优先级相同,所以C不能被B打断。但如果B和C中断是同时到达的,内核就会首先响应响应优先级别更高的B中断。


NVIC只可以配置16种 中断向量的优先级,也就是说,抢占优先级和响应优先级的数量由一个4位的数字来决定,把这个4位数字的位数 分配成抢占优先级部分和响应优先级部分。有5组分配方式。


要配置这些优先级组,可以采用库函数NVIC_PriorityGroupConfig(),可输入的参数为NVIC_PriorityGroup_0 ~ NVIC_PriorityGroup_4,分别为以上介绍的5种分配组。


中断优先级设置的步骤:

1.系统运行开始的时候设置中断分组。确定组号,也就是确定抢占优先级和子优先级的分配位数。调用函数为NVIC_PriorityGroupConfig();

2.设置所用到的中断的中断优先级别。对每个中断调用函数为NVIC_Init();

推荐阅读

史海拾趣

Exclara Inc公司的发展小趣事

在电子行业这个竞争激烈的领域里,技术的更新换代速度非常快。为了保持领先地位,Exclara高度重视研发投入,不断引进高端人才和先进设备,加强研发团队建设。通过持续的研发投入,公司不仅保持了技术的领先地位,还成功开发出了一系列具有自主知识产权的核心技术。

CUI公司的发展小趣事

近年来,智能化和物联网技术的快速发展为电子行业带来了前所未有的机遇。CUI技术作为实现电子设备智能化和互联互通的关键环节之一,得到了广泛的应用。一些企业针对智能化和物联网的需求,开发出具有特殊功能的CUI材料,如柔性CUI、透明CUI等,为电子产品的创新提供了有力支持。

请注意,以上故事仅为概述性质,并非针对特定公司的实际发展历程。每个公司的具体情况可能因市场环境、技术实力、管理策略等因素而有所不同。如果需要了解特定公司的具体发展故事,建议查阅相关公司的官方网站、新闻报道或行业分析报告。

正泰公司的发展小趣事

为了在全球市场上保持领先地位,正泰建立了北美、欧洲、亚太等三大全球研发中心,并与清华大学、上海交大等国内外知名院校、机构展开合作,探索“产学研”融合模式。通过整合全球创新资源,正泰在智能电网、新能源电车充电设施等前沿领域取得了一系列创新进展。这种全球研发体系的建立,不仅提升了公司的研发能力,也增强了公司的市场竞争力。

巨盛电子(Chesen)公司的发展小趣事

随着国内市场的饱和,巨盛电子(Chesen)开始寻求国际化发展。公司制定了一系列国际化战略,包括拓展海外市场、建立海外生产基地、与国际品牌合作等。通过这些努力,巨盛电子成功进入了欧美、东南亚等市场,实现了品牌的全球化布局。同时,公司还积极与国际品牌合作,共同开发新产品,提高了品牌知名度和市场份额。

BAHCO公司的发展小趣事

一直以来,BAHCO都秉持着创新的设计理念和对品质的极致追求。其鱼和鱼钩的商标不仅代表了公司的品牌形象,更是品质的保证。通过不断的研发和技术创新,BAHCO的产品在功能性、耐用性和舒适性等方面都达到了行业领先水平。这种对品质的不懈追求,使得BAHCO在全球工具市场上获得了广泛的认可和好评。

All Sensors公司的发展小趣事

在过去的30年里,All Sensors一直致力于为OEM客户设计定制各种经典的传感器。这些传感器不仅具有高精度、高可靠性和高灵敏度,还广泛应用于航天航空、医疗设备、环保仪器等多个领域。凭借卓越的产品性能,All Sensors的部分经典产品甚至被业界某大公司收购并发扬光大,进一步扩大了其在电子行业的影响力。

问答坊 | AI 解惑

LPC的板子的USB的线有什么特殊要求吗??

我用一根带阻抗匹配的线下载可以,我师兄拿去用了,我用MP4的线连接就没用 郁闷!…

查看全部问答>

急!!!eboot.bin文件怎么解压缩!!!

eboot.bin文件烧进系统以后,会自行压缩成eboot.nb0文件。我现在需要知道这个压缩的过程的代码是在哪个文件的哪个函数里的!有知道的吗??? 我找了F:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\ETHDBG\\BLCOMMON的BLCOMMON.c文件的DownloadImage函 ...…

查看全部问答>

WINCE驱动和WINDOWS驱动的关系???

想学WINCE的驱动,但书籍好少,于是我想先看WINDOWS的驱动,从这里入门,下面这三种那种更接近WINCE的驱动编程呢?区别又在那呢? 1)WIN9X虚拟设备驱动VxD 2)WIN NT驱动 3)WIN 2000 WDM驱动 …

查看全部问答>

89s52的的几个基础问题

1、89S52的波特率发生器是T2还是T1,还是两个都可以? 2、多机通信的时候SCON是设置成方式1还是方式3?(我要通过SM2来控制发送的是地址还是数据) 3、S52用KEIL在线仿真是接在COM口还是打印机口?…

查看全部问答>

实验室翻出来一个古董,求鉴定!

实验室最近翻出来一个古董级的CPLD(谢谢一楼~ 嘻嘻)~~ 大家帮我看看是干什么用的啊 最好能告诉我值多少钱~~~ 娃哈哈哈哈哈!   见图     对不起各位,手机拍的!! 效果差了点!! 但差不多都拍上了,请达人来 ...…

查看全部问答>

msp430

msp430的smclk是输出3.3V的方波吗?我怎么测得连500mv都不到啊?…

查看全部问答>

真正的地下车库

这个液压设备倒是猛的很…

查看全部问答>

关于热敏电阻测温精度问题

谁能告诉我热敏电阻测温精度能达到多高呢?谢谢啦…

查看全部问答>

zigbee串口分析

协议栈版本信息: ZigBee2006\\ZStack-1.4.3-1.2.1因为用现在这模块SerialApp没做成功,上电后按键没反应……两块无线龙小板子已经买来N年了. 自己想在SampleApp例子基础上修改实现串口透明传输:串口调试助手1模块1    模块2串 ...…

查看全部问答>