什么也不说了.先上一个串口通讯代码
#include <stdint.h>
#include <stdbool.h>
#include "efm32.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_gpio.h"
#include "em_usart.h"
//读取数据中断
void USART1_RX_IRQHandler(void)
{
if(USART_Rx(USART1) == 0x5)
{
GPIO_PinOutToggle(gpioPortD, 7); //如果接收到数据,反置PD7 在开发板STK3300上为LCD
}
}
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;
//设置PD0 为RX PD1为TX
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);
// 允许PD7GPIO输出
GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull,0);
unsigned char ucData = 0;
/* Infinite blink loop */
while(1)
{
unsigned long ulDelay = 100000; // 延时100MS
while(ulDelay--);
if(ucData < 10)ucData++;
else ucData = 0;
USART_Tx(USART1,ucData); // 输出ucData
}
}
|