自学内容网 自学内容网

【微处理器系统原理与应用设计第十四讲】通用同/异步收发器USART中断模式应用设计

一、功能需求

实现远程串行通信数据的回传确认。微处理器系统构成的测控设备通过USART(串口)与用户设备(上位机)相连。上位机每次发送一个字符后等待测控设备将收到的字符回传到上位机。对于测控设备而言,提供一种回传功能,即收到一个字符就立刻发送出去。

二、设计思路

管脚PA2和PA3分别为USART2的TX和RX信号。当接收到数据时产生中断,在中断中将数据发送出去。

三、程序设计

 (1)USART初始化函数

PCLK为16MHz,波特率为9600,BRR寄存器的值为PCLK/RBaud = 1667。

void UartInit(void)
{
RCC->AHB1ENR|=1; //使能GPIOA时钟
RCC->APB1ENR|=1<<17; //使能USART2时钟
//配置PA2,PA3为复用、推挽输出、高速
GPIOA->MODER = (GPIOA->MODER&~(0xF<<4))|(0xA<<4);
GPIOA->OTYPER&=~(0xF<<4);
GPIOA->OSPEEDR = (GPIOA->OSPEEDR&~(0xF<<4))|(0xA<<4);
//设置AFRL寄存器,PA2,PA3复用模式为AF7,分别为USART的TX和RX
GPIOA->AFR[0] = (GPIOA->AFR[0]&~(0xFF<8))|(0x77<8);
USART2->BRR = 1667;
USART2->CR1 = (1<<13)|(1<<3)|(1<<2); //使能收发功能
}

(2)串口数据接收函数

UartRx函数用来获取已经接收到的数据,仅当收到数据时才读取数据并成功返回,未收到返回时返回失败。

int UartRx(char* prxd)
{
if(!(USART2->SR&(0x1<<5)))
return 0;
*prxd = (char)USART2->DR; //对指针所指的变量赋值
return 1;
}

 (3)数据发送函数

UartTx函数用来发送数据,仅当发送数据寄存器空了才写入数据并成功返回,发送数据寄存器未空时返回失败。

int UartTx(char txd)
{
if(!(USART2->SR&(0x1<<7)))
return 0;
USART2-DR = txd;
return 1;
}

(4)使能接收中断函数

void UartRxIntEn(void)
{
USART2->CR1|=1<<5;
NVIC->ISER[1]=1<<6;
}

(5)USART2中断服务函数

void USART2_IRQHandler(void)
{
char ch;
while(!UartRx(&ch));
while(!UartTx(ch));
}


原文地址:https://blog.csdn.net/daviddou2022/article/details/142346529

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!