二、中断分组
0 111 0:4 0位抢占优先级,4位响应优先级
1 110 1:3 1位抢占优先级,3位响应优先级
2 101 2:2 2位抢占优先级,2位响应优先级
3 100 3:1 3位抢占优先级,1位响应优先级
4 011 4:0 4位抢占优先级,0位响应优先级
中断分组函数在misc.c里面。
编写NVIC_Init()函数时,通道channel的选择参数可在stm32f10x.h这个头文件里面找到。
中断服务函数在启动文件里面(CORE文件夹里面)比如串口的中断服务函数为USART1_IRQHandler();
串口中断转台相关函数可以在stm32f10x_usart.h这个头文件里面获得。
读取串口数据函数USART_ReceiveData();
要注意的一点是:库函数编译文件模板里的SYSTEM文件夹里面的usart.c包含中断服务函数,所以在写中断服务函数后要删除该文件
三串口通信
串口号 RXD TXD
1 PA10 PA9
2 PA3 PA2
3 PB11 PB10
4 PC11 PC10
5 PD2 PC12
1、波特率的设置
PCLK1用于USART2、3、4、5
PCLK2用于USART1
2、BRR寄存器的设置:
DIV_fraction=16*USARTDIV的小数部分(转换成16进制)
DIV_mantissa=USARTDIV的整数部分(转换成16进制)
3、串口操作相关库函数
void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位
4、串口配置的过程 1串口时钟使能,GPIO时钟使能:RCC_APB2PeriphClockCmd();
2串口复位:USART_DeInit(); 这一步不是必须的
3GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF_PP(查表,如下)
4串口参数初始化:USART_Init();
5开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)
NVIC_Init();
USART_ITConfig();
⑥使能串口:USART_Cmd();
⑦编写中断处理函数:USARTx_IRQHandler();
⑧串口数据收发:
void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据
⑨串口传输状态获取:
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);
6、IO口模式设置
表21 USART
USART引脚 配置 GPIO配置
USARTx_TX 全双工模式 推挽复用输出
半双工同步模式 推挽复用输出
USARTx_RX 全双工模式 浮空输入或带上拉输入
半双工同步模式 未用,可作为通用I/O
USARTx_CK 同步模式 推挽复用输出
USARTx_RTS 硬件流量控制 推挽复用输出
USARTx_CTS 硬件流量控制 浮空输入或带上拉输入
7、外部中断
ZET6有112个IO口,有16个中断线,每个IO口可以映射7个IO口,但是每条中断线每次只能映射一个IO口