fractio
RCCAPB2ENR12使能PORTA口时钟RCCAPB2ENR114使能串口时钟
GPIOACRH0XFFFFF00FGPIOACRH0X000008B0IO状态设置
RCCAPB2RSTR114复位串口1RCCAPB2RSTR114停止复位波特率设置USART1BRRma
tissa波特率设置
fUSART1CR10X200C1位停止无校验位
ifdefEN_USART1_RX
如果使能了接收
使能接收中断
USART1CR118PE中断使能
USART1CR115接收缓冲区非空中断使能
MY_NVIC_I
it33USART1_IRQCha
el2组2,最低优先级
e
dif
voidUSART1_IRQHa
dlervoid
u8resifUSART1SR15接收到数据
resUSART1DR
ifUSART_RX_STA0x800接收未完成
ifUSART_RX_STA0x40接收到了0x0d
ifres0x0aUSART_RX_STA0接收错误重新开始elseUSART_RX_STA0x80接收完成了
else还没收到0X0D
ifres0x0dUSART_RX_STA0x40
else
USART_RX_BUFUSART_RX_STA0X3Fres
USART_RX_STA
收数据错误重新开始接收
ifUSART_RX_STA63USART_RX_STA0接
以上两个函数已经封装在usartc中可直接调用
f三、外部中断STM32的每一个IO口都可以作为中断输入,要想把IO口作为中断输入则必须将IO口设置成上拉下拉输入或浮空输入(设置成浮空输入时要接上拉或下拉电阻否则可能导致中断不断触发)。下面总结一下设置IO口为外部中断时的步骤:(1)将IO口设置成输入模式这个在第一章总结过,这里不多说。(2)开启IO口复用时钟,设置IO口与中断线的映射关系这一步在函数voidEx_NVIC_Co
figu8GPIOxu8BITxu8TRIM中已经封装好可直接调用这里说一下IO口的复用时钟使能:
15ADC3EN
7IOPFEN
14USART1EN
6IOPEEN
13TIM8EN
5IOPDEN
12SPI1EN
4IOPCEN
11TIM1EN
3IOPBEN
10ADC2EN
2IOPAEN
9ADC1EN
1保留
8IOPGEN
0AFIOEN
RCC_APB2ENR
RCC_APB2ENR0X01使能IO口复用时钟
(3)开启与该IO口相对应的线上中断事件,并设置触发条件
这一步封装在函数voidEx_NVIC_Co
figu8GPIOxu8BITxu8TRIM中,可以直接调
用,例如:Ex_NVIC_Co
figGPIO_A0RTIR设置PA(0)上升沿触发
Ex_NVIC_Co
figGPIO_A13FTIR设置PA(13)下降沿触发
(4)配置中断分组(NVIC)并使能中断
这一步封装在函数voidMY_NVIC_I
itu8NVIC_Preemptio
Priorityu8NVIC_SubPriorityu8
NVIC_Cha
elu8NVIC_Group里面可以直接调用,例如:
MY_NVIC_I
it22EXTI0_IRQCha
el2抢占2,子优先级2,组2
这里值得注意的是EXTI0、EXTI1、EXTI2、EXTI3、EXTI4为Li
e0Li
e4
EXTI15_10为Li
e15Li
e10EXTI9_5为Li
e9Li
e5
5编写中断服务函数
例如:voidEXTI15_10_IRQHa
dlervoid
delay_ms10消抖
ifKEY00
按键0
LED0LED0
elseifKEY10按键1
LED1LED1
EXTIPR113清除LINE13上r