STM32單片機(jī),UART的寄存器配置以及工作原理
[導(dǎo)讀]前言UART是重要的片上資源,主流單片機(jī)基本上都有該功能,通過UART可以擴(kuò)展出很多的通信接口,如RS232、RS485、LIN,甚至WIFI、藍(lán)牙模組等,可以說只要搞通訊就會涉及到UART。下面和大家分享STM32的UART配置。1UART是什么USART全稱universal...
前言
UART是重要的片上資源,主流單片機(jī)基本上都有該功能,通過UART可以擴(kuò)展出很多的通信接口,如RS232、RS485、LIN,甚至WIFI、藍(lán)牙模組等,可以說只要搞通訊就會涉及到UART。下面和大家分享STM32的UART配置。4 USART的代碼示例4.1 標(biāo)準(zhǔn)庫提供的常用USART接口標(biāo)準(zhǔn)庫為所有的外設(shè)都提供了封裝寄存器的API接口函數(shù),文件名為stm32f10x_peripheral.c;以下為usart外設(shè)的常用函數(shù);
//串口USARTx的參數(shù)配置初始化函數(shù);void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);//使能串口,(主要是分頻器和輸出的設(shè)置)void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);//使能串口中斷,(就是那8個中斷,均可以進(jìn)入中斷函數(shù))void?USART_ITConfig(USART_TypeDef*?USARTx,?uint16_t?USART_IT,?FunctionalState?NewState);//都是處理一個字節(jié);void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);uint16_t?USART_ReceiveData(USART_TypeDef*?USARTx);//讀取SR寄存器的狀態(tài),SR的狀態(tài)都是硬件設(shè)置的;FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);//讀取SR寄存器和CRx控制寄存器的狀態(tài),和上面一個功能相同的;ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
//修改SR寄存器的狀態(tài),單功能通訊用不上;void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);4.2 USART1使用代碼
#include "usartDemo.h" u8 USART1_RX_BUF[256]; //接收緩存u8 USART1_RX_CNT = 0; //接收字節(jié)計數(shù)u8 USART1_REV_0D = 0; //收到\ru8 USART1_REV_0A = 0; //收到\r和\n
//usart1初始化之后,便可以通過串口讀寫了;void Usart1_Init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級 0-3;
//USART1外設(shè)中斷配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //搶占優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init( 




