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的主要内容,如果未能解决你的问题,请参考以下文章