简介: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); }}
版权声明:本文为博主原创文章,未经博主允许不得转载。
别让别人徘徊的脚步踩碎你明天美好的梦想,