嵌出式开发学习

端口复用:
一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。

例如当串口1的发送接收引脚PA9 PA10,当我们把PA9 PA10不用做GPIO,而用作复用功能串口1的发送接收引脚的时候,叫做串口的复用

端口复用配置过程:以PA9,PA10为例子

GPIO端口时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
复用外设时钟使能
因为你要将端口PA9,PA10复用为串口,所以要使能串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
端口的模式配置就在GPIO_Init()函数中设置即可 就是和之前配置一样即可

端口的重映射
在STM32中一个外设的引脚除了具有默认端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其他端口
重映射的配置过程如下:
1.使能GPIO时钟(重映射后的IO)
2.使能功能外设时钟(例如串口1)
3.使能AFIO时钟,重映射必须使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
4.开启重映射
GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE)
根据第一个参数可以判断是部分重映射还是全部重映射

中断优先级管理
(NVIC)
中断优先级分组
组0-4,同时对每个中断设置一个抢占优先级和响应优先级的设置
分组配置是在寄存器SCB->AIRCR中配置的
高抢占优先级可以打断正在进行的低抢占优先级中段
抢占优先级相同的情况下看响应优先级

数字越低 等级越高

在系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组后一般不会再改变分组,随意改变分组会导致中断管理混乱,程序出现意想不到的结果

处理器与外部设备通信的两种方式:
1.并行通信
传输原理:数据各个位同时传输
优点:速度快
缺点:引脚占用资源多

串行通信:
传输原理:数据按位顺序传输
优点:占用的引脚资源少
缺点:速度慢

方向分为:
单工:数据传输只支持再一个方向上传输
半双工:允许数据在两个方向上传输,但是,在某一个时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信
全双工:允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送数据能力

同步通信:带时钟同步信号传输,SPI IIC通信接口
异步通信:不带时钟同步信号,UART(通用异步收发器) 单总线

USART:通用同步异步收发器

UART异步通信方式引脚连接方式:
RXD:数据输入引脚,数据接收:
TXD:数据发送引脚,数据发送。

STM32串口异步通信需要定义的参数
1.起始位
2.数据位(8位或者9位)
3.奇偶校验位(第九位)
4.停止位(1,15,2位)
5.波特率设置

外部中断
STM32的每个IO口都可以作为外部中断输入
STM32的中断控制器支持19个外部中断/事件请求:
线0-15:对应外部IO口的输入中断
线16:连接PVD输出
线17:连接RTC闹钟事件
线18:连接到USB唤醒事件
每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

外部中断映射的关系
例如:
GPIOX.0映射到EXTI0
GPIOX.1映射到EXT1

GPIOX.15映射到EXTI15

IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数
1234分别对应一个中断服务函数 5-9对应一个中断服务函数 10-15对应一个中断服务函数 加起来正好七个
外部中断常用的库函数
//1.设置IO口与中断线映射的关系
Void GPIO_EXTILineConFig(uint8_t GPIO_PortSource,unit8_t GPIO_PinSource);

//2.初始化中断线:触发方式
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);

//3判断中断线中断状态 是否发生
ITStatus EXTI_GetITStatus(uint32_t EXTI_Line);

//4.清楚中断线上的中断标志位
void EXTI_ClearITPendBit(uint32_t EXTI_Line);

外部中断的一般配置步骤
1.初始化IO口为输入
GPIO_Init();
2.开启IO口的时钟复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
3.设置IO口与中断线的映射关系
void GPIO_EXTILineConFig();
4.初始化线上的中断,设置触发条件
EXTI_Init();
5.配置中断分组(NVIC),并使能中断
NVIC_Init();
6.编写中断服务函数
EXTIx_IRQHandler();
7.清楚中断标志位
EXTI_ClearITPendingBit();

中断优先级设置

配置步骤:
1.串口时钟使能,GPIO 时钟使能
2.串口复位
3. GPIO 端口模式设置
4. 串口参数初始化
5. 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
6. 使能串口
7. 编写中断处理函数

独立看门狗
为什么需要看门狗?
因为单片机在工作的时候时常会受到外界磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞的状态,发生不可预料的后果,所以处于对单片机运行状态进行实时的监测的考虑,便产生了一种专门用于监测单片机运行状态的模块或者芯片,也就是看门狗

看门狗解决 什么问题?
在启动正常运行的时候,系统不能复位,在系统跑飞,程序异常执行的情况下,系统复位,程序重新执行

STM32内置两个看门狗
一个独立看门狗一个窗口看门狗

独立看门狗IWDG需要专用的低速时钟LSI驱动,即使主时钟发生故障它仍然有效
独立看门狗适合应用于需要看门狗作为一个在主程序之外能够完全独立工作,并且对时间精度低的场合
窗口看门狗由APB1时钟分频后得到时钟驱动,通过可配置时间窗口来检测应用程序非正常的过迟或者过早的操作
c窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序

独立看门狗的秒速:
在键值寄存器(IWDG_KR)中写入0xCCCC,开始启用独立看门狗,此时计数器开始从其复位值0XFFF递减,当计数器计数到尾值0x000时会产生一个复位信号(IWDG_RESET)
无论何时,只要在键值寄存器中IWDG_KR中写入0xAAAA(通常说的喂狗),自动重装载寄存器 IWDG_RLR的值就会重新加载到计数器,从而避免看门狗复位
如果程序异常,就无法正常喂狗,从而系统复位

IWDG独立看门狗常用的库函数
void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//取消写保护 0X5555使能
void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//设置预分频系数 写PR
void IWDG_SetReLoad(uint16_Reload)//设置重装载值 写RLR
voud IWDG_ReloadCounter(void);//喂狗 写0xAAAA到KR
void IWDG_Enable(void);使能看门狗 写0Xcccc到KR
FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//状态 重装载/预分频更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值