本文是针对stm32F1系列的一些基础部分的底层配置的流程的总结。主要包括了GPIO普通配置、GPIO复用配置、GPIO重映射配置及中断优先级管理。其中紫色部分为调用正点原子的SYSTEM文件夹里的函数来实现相应步骤。
GPIO普通配置
1.使能时钟 RCC->APB2ENR
2.配置八种模式 GPIOx->CRL/CRH
GPIO复用配置
1.使能IO时钟 RCC->APB2ENR
2.使能外设时钟 RCC->APB1ENR/APB2ENR
3.设置IO对应模式 GPIOx->CRL/CRH
GPIO重映射配置
1.使能复用后的IO时钟 RCC->APB2ENR
2.使能外设时钟 RCC->APB1ENR/APB2ENR
3.使能AFIO时钟 RCC->APB2ENR
4.设置IO对应模式 GPIOx->CRL/CRH
PS.开启AFIO辅助功能的时钟的情况
复用重映射和调试I/O配置寄存器 AFIO_MAPR:配置复用功能重映射
外部中断配置寄存器 AFIO_EXTICRx:配置外部中断线映射
事件控制寄存器 AFIO_EVCR: 配置EVENTOUT事件输出
中断优先级管理
1.设置中断优先级分组
应用程序中断及复位控制寄存器 SCB->AIRCR的BIT【8--10】优先级配置(读à改à写方式来防止改其他位)
{
//设置 NVIC 分组
//NVIC_Group: NVIC 分组 0~4 总共 5 组
void MY_NVIC_PriorityGroupConfig(u8 NVIC_Group)
}
2.使能中断
中断使能寄存器组NVIC->ISER[NVIC_Channel/32]|=(1<<NVIC_Channel%32);
3.设置响应优先级和抢断优先级
中断优先级控制寄存器组 NVIC->IP[NVIC_Channel]|=temp<<4;
整个的调用函数
{
//NVIC_PreemptionPriority: 抢占优先级
//NVIC_SubPriority : 响应优先级
//NVIC_Channel : 中断编号
//NVIC_Group : 中断分组 0~4
//注意优先级不能超过设定的组的范围!否则会有意想不到的错误
//组划分:
//组 0: 0 位抢占优先级, 4 位响应优先级
//组 1: 1 位抢占优先级, 3 位响应优先级
//组 2: 2 位抢占优先级, 2 位响应优先级
//组 3: 3 位抢占优先级, 1 位响应优先级
//组 4: 4 位抢占优先级, 0 位响应优先级
//NVIC_SubPriority 和 NVIC_PreemptionPriority 的原则是, 数值越小, 越优先
void MY_NVIC_Init(u8 NVIC_PreemptionPriority,u8 NVIC_SubPriority,u8 NVIC_Channel,
u8 NVIC_Group)
}
PS.如果需要挂起/解挂,查看中断当前激活状态,分别调用相关寄存器即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)