STM32 无中断串口代码2010-05-14 16:09串口,是我们日常使用最多的一部分,刚开始做电子工程师的,基本都是从这个开始的,下面的代码是我使用STM32库编写的串口输出和读取的代码。
1、串口初始化函数:void USART_Ini(USART_TypeDef* USARTx,u16 buad)2、串口中断开启和关闭:USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)3、串口接收:u16 Getch(USART_TypeDef* USARTx)4、串口单个字符输出:void Putch(USART_TypeDef* USARTx,u16 ch)5、串口输出字符串:void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)#include "stm32f10x_lib.h"u16 RecDateBuffer[100];u16 RecLen;u8 SendDateBuffer[100];/************************************************************* ******************* Function Name : Uart_Ini* Description : 串口初始化* Input :* Output : None* Return :************************************************************** *****************/void USART_Ini(USART_TypeDef* USARTx,u16 buad){USART_InitTypeDef USART_InitStructure;USART_ClockInitTypeDef USART_ClockIni;GPIO_InitTypeDef GPIO_InitStructure;/* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOD, &GPIO_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOD, &GPIO_InitStructure);USART_ART_BaudRate = 9600; //串口波特率USART_ART_WordLength = USART_WordLength_8b; //串口数据长度USART_ART_StopBits = USART_StopBits_1; //串口停止位USART_ART_Parity = USART_Parity_No; //串口奇偶效验位USART_ART_Mode = USART_Mode_Rx|USART_Mode_Tx; //串口模式,开始起发送和接收USART_ART_HardwareFlowControl =USART_HardwareFlowControl_None; //串口硬件流USART_ART_Clock = USART_Clock_Disable;USART_ART_CPOL = USART_CPOL_Low;USART_ART_CPHA = USART_CPHA_2Edge;USART_ART_LastBit = USART_LastBit_Disable;USART_Init(USARTx,&USART_InitStructure);USART_ClockInit(USARTx,&USART_ClockIni);/* Enable USART1 */USART_Cmd(USARTx, ENABLE); //开启串口X}/************************************************************* ******************* Function Name : Getch* Description : 串口中断开启或关闭* Input : USARTx:x=串口号NewState:ENABLE开启中断,DISABLE关闭中断* Output : None* Return :************************************************************** *****************/void USART_IT(USART_TypeDef* USARTx,FunctionalState NewState){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);if(NewState==ENABLE){USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,ENABLE);}else{USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,DISABLE);}}/************************************************************* ******************* Function Name : Getch* Description : 串口接收字符* Input : USARTx:x=串口号* Output : None* Return :************************************************************** *****************/u16 Getch(USART_TypeDef* USARTx){u16 ch;if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET){ch=USART_ReceiveData(USARTx);//return(ch);}return(ch);}/************************************************************* ******************* Function Name : GetStr* Description : 接收字符串* Input : USARTx:x=串口号buffer:接收字符串数组* Output : None* Return :************************************************************** *****************/void GetStr(USART_TypeDef* USARTx){//u16 i;while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET){if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE)==RESET){if(RecLen<100){RecDateBuffer[RecLen]=USART_ReceiveData(USARTx);RecLen++;}}}}/************************************************************* ******************* Function Name : Putch* Description : 串口输出一个字符* Input : USARTx:x=串口号ch:串口输出的字符* Output : None* Return :************************************************************** *****************/void Putch(USART_TypeDef* USARTx,u16 ch){if(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==SET){USART_SendData(USARTx,ch);}}/************************************************************* ******************* Function Name : PutStr* Description : 串口输出字符串* Input : USARTx:x=串口号SendBuf:串口输出字符串Length:输出长度* Output : None* Return :************************************************************** *****************/void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length){u16 i;for(i=0;i<Length;i++){Putch(USARTx,SendBuf[i]);}}。