stm32的复用和中断
2017-04-26 09:21
239 查看
stm32中通过结构体将寄存器组织在一起,通过修改结构体成员变量的值就可以达到操作对应寄存器的值。这些都是在stm32f4xx.h文件中完成的。
STM32的GPIO的复用功能:GPIO的基本功能是普通的IO,STM32有自己的各个功能模块,这些内置外设的外部引脚与标准GPIO复用,作为这些模块的功能引脚,就叫复用。
更通俗的讲,GPIO最普通应用为IO口,通过配置寄存器将它设置成串口、并口、模数口等。
1 要使用IO复用功能外设,必须先打开相应地IO口时钟和复用功能时钟外设。
如 USART1接PA9 、PA10,需要使能GPIOA ,USART1
2 需要将GPIOA中的MODER寄存器中的IO口(PA9 PA10)配置为复用功能。
3 对IO口的其他参数进行配置。
4 配置GPIOA_AFRL和GPIOA_AFRH寄存器,将IO连接到所需要的AFx。
对于库函数,调用函数GPIO_PinAFConfig函数来实现。
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); // 第三个参数确定IO到底复用为哪种功能。
中断管理
中断管理函数主要是在misc.c文件中。 // 在库函数中,利用函数操作寄存器的位数
1 中断优先级分组:分组的设置是由SCB-->AIRCR寄存器的bit8~10来定义的,如组设置3,则3位抢占优先级(000 001 010 011 100 101 110 111 7位0~7可选),1位响应优先级(0 1 两位可选);抢占优先级高于响应优先级,数值越小所代表的优先级就越高。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
2 中断初始化函数NVIC_Init.
3 使能相应地中断
使能串口中断的函数:void USART _ITConfig(USART_TypeDef* USARTx,uint16t_t USART_IT,FunctionState NewState );
如:接收到数据(RXNE读数据寄存器非空),我们要产生中断,则开启中断的方式为:
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE).
4 使能串口
使能串口通过调用函数USART_Cmd(USART1,ENABLE);
5 获取相应中断状态
在使能了某个中断后,当中断发生时,需要在中断处理函数中调用获取中断函数判断是否发生中断。
void USART_GetITStatus(USART1,USART_IT_TC); //判断是否 串口发送完成 产生中断
6 编写中断处理函数
void USART1_IRQHandler(void);
STM32的GPIO的复用功能:GPIO的基本功能是普通的IO,STM32有自己的各个功能模块,这些内置外设的外部引脚与标准GPIO复用,作为这些模块的功能引脚,就叫复用。
更通俗的讲,GPIO最普通应用为IO口,通过配置寄存器将它设置成串口、并口、模数口等。
1 要使用IO复用功能外设,必须先打开相应地IO口时钟和复用功能时钟外设。
如 USART1接PA9 、PA10,需要使能GPIOA ,USART1
2 需要将GPIOA中的MODER寄存器中的IO口(PA9 PA10)配置为复用功能。
3 对IO口的其他参数进行配置。
4 配置GPIOA_AFRL和GPIOA_AFRH寄存器,将IO连接到所需要的AFx。
对于库函数,调用函数GPIO_PinAFConfig函数来实现。
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); // 第三个参数确定IO到底复用为哪种功能。
中断管理
中断管理函数主要是在misc.c文件中。 // 在库函数中,利用函数操作寄存器的位数
1 中断优先级分组:分组的设置是由SCB-->AIRCR寄存器的bit8~10来定义的,如组设置3,则3位抢占优先级(000 001 010 011 100 101 110 111 7位0~7可选),1位响应优先级(0 1 两位可选);抢占优先级高于响应优先级,数值越小所代表的优先级就越高。
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
2 中断初始化函数NVIC_Init.
3 使能相应地中断
使能串口中断的函数:void USART _ITConfig(USART_TypeDef* USARTx,uint16t_t USART_IT,FunctionState NewState );
如:接收到数据(RXNE读数据寄存器非空),我们要产生中断,则开启中断的方式为:
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE).
4 使能串口
使能串口通过调用函数USART_Cmd(USART1,ENABLE);
5 获取相应中断状态
在使能了某个中断后,当中断发生时,需要在中断处理函数中调用获取中断函数判断是否发生中断。
void USART_GetITStatus(USART1,USART_IT_TC); //判断是否 串口发送完成 产生中断
6 编写中断处理函数
void USART1_IRQHandler(void);
相关文章推荐
- 单片机入门学习九 STM32单片机学习六 延时函数、端口复用和重映射、中断
- stm32 JTAG引脚复用问题 与 RA8835驱动
- cortex_m3_stm32嵌入式学习笔记(八):定时器中断实验(定时器的更新中断)
- STM32之外部中断例程
- STM32双机SPI中断通信机制
- 第十三章:STM32-外部中断学习
- STM32中断优先级
- STM32中断中设置的先占式优先级与从优先级(转)
- STM32的复用时钟的开启和重映射功能
- STM32中断优先级彻底讲解
- STM32之EXTI(中断)
- STM32 NVIC中断优先级:抢占优先级&响应优先级区别
- STM32 端口复用&重映射(USART Remap)
- STM32——中断
- STM32学习笔记-外部中断
- STM32利用串口空闲中断在串口DMA配置下接收变长数据
- STM32 NVIC 中断优先级管理
- STM32串口中断的一些资料
- 原子战舰STM32——定时器捕获中断库函数程序中中断处理函数说明
- STM32之中断与事件---中断与事件的区别