串口通讯(SerialCommunication)是一种设备间非常常用的串行通讯方式,因为它简单 便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。
stm32f103 串口通讯大致可以分为这五步
1.初始化gpio口,使能RX和TX引脚GPIO时钟
2.初始化USART,和USART时钟;
3.初始化nvic 总中断
4.编写字符串发送函数
5.编写USART 中断服务函数
1.初始化gpio口,使能RX和TX引脚GPIO时钟
void init_uart_gpio(void)
{
GPIO_InitTypeDef tx;
GPIO_InitTypeDef rx;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
tx.GPIO_Mode=GPIO_Mode_AF_PP;
tx.GPIO_Pin=GPIO_Pin_9;
tx.GPIO_Speed=GPIO_Speed_50MHz;
rx.GPIO_Mode=GPIO_Mode_IN_FLOATING;
rx.GPIO_Pin=GPIO_Pin_10;
GPIO_Init(GPIOA,&tx);
GPIO_Init(GPIOA,&rx);
}
2.初始化USART,和USART时钟;
void init_uart1()
{
USART_InitTypeDef uart;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
uart.USART_BaudRate=115200;
uart.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
uart.USART_Parity=USART_Parity_No;
uart.USART_StopBits=USART_StopBits_1;
uart.USART_WordLength=USART_WordLength_8b;
uart.USART_Mode= USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&uart);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
3.初始化nvic 总中断
void init_uart_nvic(void)
{
NVIC_InitTypeDef nvic;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
nvic.NVIC_IRQChannel=USART1_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority=1;
nvic.NVIC_IRQChannelSubPriority= 1;
nvic.NVIC_IRQChannelCmd =ENABLE;
NVIC_Init(&nvic);
}
4.编写字符串发送函数
void Usart_SendByte(USART_TypeDef *pUSARTx,uint8_t ch)
{
USART_SendData(pUSARTx,ch);
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TXE)==RESET);
}
void Usart_SendString(USART_TypeDef *pUSARTx,char *str)
{
while(*str!='\0')
{
Usart_SendByte(pUSARTx,*str);
str++;
}
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}
5.编写USART 中断服务函数
void USART_IRQHandler(void)
{
uint8_t ucTemp;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET){
ucTemp=USART_ReceiveData(USART1);
USART_SendData(USART1,ucTemp);
}
}
来源:https://blog.csdn.net/Addrews/article/details/100996467