USART之UART Rx interrupt

简介:USART集成了SPI及UART,所以仅仅只有SPI的demo是不够的。因此,才有了这段最简单的UART的运行例程。发送使用循环发送。接收使用中断接收。

硬件准备:TG STK , 将20pin 扩展口的4脚与6脚相连接。第4脚为PD0,,Tx, 第6脚为PD1,Rx。

软件流程:UART配置完毕之后,在主函数中不停的发送0到9. 而接收中断中则判断是否接收到了5,如果是则翻转LED灯的状态。结果就可以看到LED灯不停的亮灭。

例程代码如下:

#include <stdint.h>#include <stdbool.h>#include "efm32.h"#include "efm32_chip.h"#include "efm32_cmu.h"#include "efm32_gpio.h"#include "efm32_usart.h"

void USART1_RX_IRQHandler(void){ if(USART_Rx(USART1) == 0x5) { GPIO_PinOutToggle(gpioPortD, 7); }}

void UART_Initial(void){ CMU_ClockEnable(cmuClock_HFPER, true); CMU_ClockEnable(cmuClock_GPIO, true); CMU_ClockEnable(cmuClock_USART1, true); USART_InitAsync_TypeDef UART_init = USART_INITASYNC_DEFAULT; UART_init.baudrate = 9600; USART_InitAsync(USART1, &UART_init); USART1->IFC = _USART_IFC_MASK; NVIC_ClearPendingIRQ(USART1_RX_IRQn); NVIC_EnableIRQ(USART1_RX_IRQn); USART1->IEN = USART_IEN_RXDATAV; GPIO_PinModeSet(gpioPortD,0,gpioModePushPull,1); //tx GPIO_PinModeSet(gpioPortD,1,gpioModeInput,1); //rx USART1->ROUTE |= USART_ROUTE_TXPEN | USART_ROUTE_RXPEN | USART_ROUTE_LOCATION_LOC1;}

/**************************************************************************//*** @brief Main function*****************************************************************************//**************************************************************************//*** @brief Main function*****************************************************************************/int main(void){ /* Chip errata */ CHIP_Init(); SystemCoreClockUpdate(); UART_Initial(); CMU_ClockEnable(cmuClock_GPIO, true); GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull,0); unsigned char ucData = 0; /* Infinite blink loop */ while(1) { unsigned long ulDelay = 100000; while(ulDelay–); if(ucData < 10)ucData++; else ucData = 0; USART_Tx(USART1,ucData); }}

版权声明:本文为博主原创文章,未经博主允许不得转载。

别让别人徘徊的脚步踩碎你明天美好的梦想,

USART之UART Rx interrupt

相关文章:

你感兴趣的文章:

标签云: