USART1串口通信2

Posted 旭日初扬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USART1串口通信2相关的知识,希望对你有一定的参考价值。

#include "public.h"

int fputc(int ch,FILE*p)

	//  Transmits single data through the USARTx peripheral.
	//  通过USARTx外围设备传输单个数据。
  USART_SendData(USART1,(u8)ch);
	
	//  Checks whether the specified USART flag is set or not.
//  检查是否设置USART指定的标志
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==!RESET);
	return ch;



void USARTxStructInit(u32 bound,USART_TypeDef* USART_x)

  USART_InitTypeDef USART_InitStructure;

//  baud rate setting   波特率设置
	USART_InitStructure.USART_BaudRate = bound;
	
	//  Data format with word length 8. 字长为8的数据格式
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	
	//  One stop bit.    一个停止位
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
	
	//  None Parity bit. 无奇偶校验位  
	USART_InitStructure.USART_Parity = USART_Parity_No;
	
	//  No hardware data flow control.  无硬件数据流控制
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	
	//  Receiving and Sending mode.     收发模式
	USART_InitStructure.USART_Mode = USART_Mode_Rx |USART_Mode_Tx;
	
	// struct init
	USART_Init(USART_x,&USART_InitStructure);




void USART1_Init(void)

	
	  // enable USART1 Clock
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	  /* configuration GPIO mode and GPIO port*/
	  // TX
	  GPIOInit(RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP);
	
	  // RX
		GPIOInit(RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING);

	  USARTxStructInit(115200,USART1);
	
	  USART_Cmd(USART1,ENABLE);

	 //  Clears the USARTx's pending flags.
	 USART_ClearFlag(USART1,USART_FLAG_TC);
	

	 //  USART_IT_RXNE  Receive Interrupt
	  USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
	
    NVICInit(USART1_IRQn,3,3);





void USART1_IT_SERVE(void)

  uint8_t ucTemp;
if (USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET) 
ucTemp = USART_ReceiveData( USART1 );
 USART_SendData(USART1,ucTemp);
 




void Logic_Main(void)

	
	if(USART1TIME > 255)
	
	   USART1TIME++;
	
	else
	
	
   Usart_SendString(USART1,"这是一个串口中断接收回显实验\\n");

	




 /***************** 发送一个字符 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
 
 /* 发送一个字节数据到 USART */
 USART_SendData(pUSARTx,ch);
 
/* 等待发送数据寄存器为空 */
 while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
 
 
/***************** 发送字符串 **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
 
 unsigned int k=0;
 do 
Usart_SendByte( pUSARTx, *(str + k) );
 k++;
 while (*(str + k)!='\\0');
 
 /* 等待发送完成 */
while (USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET) 
 
 

 

以上是关于USART1串口通信2的主要内容,如果未能解决你的问题,请参考以下文章

STM32串口通信配置(USART1+USART2+USART3+UART4)

STM32串口通讯程序

STM32串口通讯问题

16 . USART 串口通信实验

16 . USART 串口通信实验

16 . USART 串口通信实验