STM323 USART串口通信中斷實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
問(wèn)題描述:利用stm32串口通信,當(dāng)PC端發(fā)送字符8時(shí),LED PB.0閃亮
第一步:配置系統(tǒng)時(shí)鐘,這個(gè)不用多講,代碼就不貼出來(lái)了;
第二步:GPIO端口配置:
設(shè)置PA.9為復(fù)用推挽輸出,PA.10為浮空輸入,PB.0,PB.1,PB.2輸出并初始化PB.0亮
voidGPIO_Config()
{
GPIOA->CRH=0X04B0;
GPIOB->CRL=0X0333;
GPIOB->ODR=0X01;
}
第三步:USART寄存器配置:
voidUSART_Config()
{
USART1->BRR=0x1D4C;
USART1->CR1|=0X202C;
}
第一行,設(shè)置波特率9600 第二行,使能USART,接受中斷打開,發(fā)送使能,接受使能;
第四步:NVIC寄存器配置:
voidNVIC_Configuration()
{
u32temp;
temp=SCB->AIRCR;
temp&=0x0000f8ff;
temp|=0x05fa0000;
temp|=0x0700;
SCB->AIRCR=temp;
NVIC->ISER[1]=1<<5;
NVIC->IP[1]=0;
}
前幾行的代碼沒(méi)什么變化,通過(guò)向量表找到相應(yīng)的USART1的序號(hào),然后根據(jù)序號(hào)寫上后兩行就行,NVIC->ISER中斷使能寄存器,NVIC->IP中斷優(yōu)先級(jí)控制寄存器,最后一行不要也行。
接下來(lái)是led函數(shù):直接上代碼
voidled()
{
GPIOB->ODR=0X01;
Delay_ms(100);
GPIOB->ODR=0;
Delay_ms(100);
}
然后是main函數(shù):一直讓它while下去吧!
intmain()
{
SysclkConfiguration();
GPIO_Config();
USART_Config();
NVIC_Configuration();
while(1)
{
if(temp==1)
led();
}
}
最后是中斷服務(wù)函數(shù):沒(méi)啥要注意的,直接上代碼(剛開始一直把函數(shù)名寫錯(cuò)了,費(fèi)了好大事)
unsignedchardata1;
externu8temp;
voidUSART1_IRQHandler(void)
{
data1=USART1->DR;
if(temp==0)
temp=1;
else
temp=0;
}