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

发布者:转眼人老最新更新时间:2020-02-07 来源: elecfans关键字:STM32  单片机  复用端口初始化 手机看文章 扫描二维码
随时随地手机看文章

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();

关键字:STM32  单片机  复用端口初始化 引用地址:STM32单片机的复用端口初始化的步骤及方法

上一篇:如何用stm32使用LWIP网络协议栈实现DHCP客户端
下一篇:基于STM32单片机对HCSR04超声波的控制

推荐阅读最新更新时间:2024-11-10 19:26

基于51单片机太阳能电池太阳跟踪装置程序设计
#include reg51.h #include intrins.h #include absacc.h #define uchar unsigned char #define uint unsigned int #define ysfs 600 //宏定义 预设风速 #define shuiping 1500 //宏定义 水平位置AD转换结果 #define fuyang 1500 //宏定义 俯仰位置AD转换结果 #define PA XBYTE //8255芯片端口4个基地址宏定义 #d
[单片机]
关于STM32的几点重要内容
主要内容: 1.为什么STM32F0没有AFIO时钟呢? 2.关于STM32中的各种电源 3.IAR中如何查看外设寄存器 4.关于问问题 1为什么STM32F0没有AFIO时钟呢? 前面写过一篇文章【 关于STM32时钟配置的那些坑 】里面有讲述关于什么时候开启AFIO时钟,有朋友下来去研究AFIO时钟时发现STM32F0芯片中没有AFIO时钟,于是就问了这么一个问题:你好,为什么STM32F0没有AFIO时钟呢? 答案就是STM32F0没有AFIO时钟。那又是怎样实现重定义这个功能的呢? 实现重定义功能也是由特定的控制器完成的,需要使用某个控制器,就需要开启对应的时钟。 而STM32F1就是由“Alterna
[单片机]
关于<font color='red'>STM32</font>的几点重要内容
STM32无法连接JLink(Flash读写保护)解决方法
CPU:STM32F429IGT6 对于其他的stm32芯片或者其他ARM芯片,其实解决方法都相通,主要就是先修改启动方式,再去更改flash或者ram中的程序。 1.问题出现原因 最近在调试一个程序时,始终调试不通,没办法了,就想着参考网上的例程来看看,结果下载的stm32工程可能和板子的硬件不太一样导致stm32 flash读写保护,此后使用JLink再也无法连接上stm32了,Keil中也没办法识别出设备: Snipaste_2020-12-10_10-37-11 2.解决方法 首先,修改stm32的启动方式,我的板子默认设置的是从内部flash启动,这里要解决stm32的读写保护就不能选择从内部flash启动了。修
[单片机]
<font color='red'>STM32</font>无法连接JLink(Flash读写保护)解决方法
必须知道的stm32内部flash操作细节
1.stm32内部flash写操作只能是两个byte写入,不能一个byte一个byte的写 2.写之前需要擦除,擦除后数据均为FF 3.内部flash为512kb为大容量,小于512为小容量。在stm32的stm32f10x_flash.c里面FLASH_Status FLASH_ErasePage擦除页函数有区别擦2k还是擦1k,大容量擦2k,小容量擦1k 4.读可以只读一个字节,例如:*(uint8_t*)(Address) 5.我的代码中,擦除和写过程没有加延时函数,因为库函数里面已经有一个确保操作完成的函数。 6.擦写前先调用解锁函数。
[单片机]
基于单片机的便携数字存储示波器
  在电子技术领域中, 通常需要借助于一些辅助的仪器来观察电路中信号的相互关系, 这些仪器的种类很多, 比如万用表、信号源、示波器、频谱仪等。其中, 示波器可以观察到信号的全貌, 它可以在显示屏幕上直接观察到被测信号的波形, 并测量信号的幅度、频率、周期等基本参量。除此之外, 其他的非电量也可以转化为电量, 使用示波器进行观测。因此, 示波器得到了广泛的应用。随着电子设备复杂程度的增加, 对于示波器这样的测量仪器也提出了更多的要求, 除了成本的限制以外, 在体积、性能以及使用的灵活性方面也有了新的要求。目前常用的示波器一般都是体积比较大, 成本高,这就使它的应用受到了一些限制, 在这种情况下, 开发低成本便携的手持示波器, 将会大大
[单片机]
基于<font color='red'>单片机</font>的便携数字存储示波器
单片机硬件系统7个设计原则
一个单片机硬件系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。 系统的扩展和配置应遵循以下原则: 1、尽可能选择典型电路,并符合单片机硬件系统常规用法。为硬件系统的标准化、模块化打下良好的基础。 2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。 3、硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响
[单片机]
单片机在超低功耗高精度转达液位仪中的应用
TI公司的MSP430系列单片机就顺应了这些发展趋势。它的低功耗特点使之特点适用于电池供电设备或手持设备中。该系列单处机还将大量的外围模块整合到片内,所以也适合构成较完整的片上系统。其丰富的型号给设计者选择带来了很大的灵活性。MSP430系列采用16位精简指令架构,有大量工作寄存器和数据存储器(MSP430F449含有最多的2KB的RAM),可以说,MSP430系列单片机凭借这些杰出的性能特点,已成为众多单片机中耀眼的新星。 雷达液位仪是雷达技术应用于民用领域的典型例子,它用于石油工业等行业里高压储罐的液位测量中。国外公司开发的产品价格昂贵,而国内的相关研究结果还不能令人满意。所以研制高性能、智能化的雷达液位仪,对我国石油工业
[单片机]
<font color='red'>单片机</font>在超低功耗高精度转达液位仪中的应用
STM32简单的LED流水灯程序
//0x4002 1000 - 0x4002 13FF 复位和时钟控制(RCC) #define RCC_BASE 0x40021000 #define RCC_APB2ENR (RCC_BASE+0x18) //LED接在GPIOF上,是APB2上的外设,是RCC_APB2ENR寄存器的第7位 //APB20x4001 1c00 GPIO端口F #define GPIOF_BASE 0x40011c00 #define GPIOF_CHL (0x000+GPIOF_BASE) #define GPIOF_CHR (0x004+GPIOF_BASE) #defin
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved