stm32串口通信程序
时间: 2023-05-23 16:03:25 浏览: 127
STM32_串口通信完整程序
4星 · 用户满意度95%
可以参考以下代码:
#include "stm32f10x.h"
/**
* @brief 串口初始化函数
* @param USARTx 串口号
* @param baudrate 波特率
*/
void USARTx_Init(USART_TypeDef* USARTx, u32 baudrate)
{
USART_InitTypeDef USART_InitStructure;
// 使能GPIO和USART时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx | RCC_APB2Periph_USARTx, ENABLE);
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // TX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOx, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOx, &GPIO_InitStructure);
// 初始化USART
USART_InitStructure.USART_BaudRate = baudrate;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USARTx, &USART_InitStructure);
// 使能USART
USART_Cmd(USARTx, ENABLE);
}
/**
* @brief 发送一个字符到串口
* @param USARTx 串口号
* @param ch 字符
*/
void USARTx_SendChar(USART_TypeDef* USARTx, char ch)
{
while (!(USARTx->SR & USART_SR_TC));
USART_SendData(USARTx, ch);
}
/**
* @brief 发送一个字符串到串口
* @param USARTx 串口号
* @param str 字符串
*/
void USARTx_SendString(USART_TypeDef* USARTx, const char* str)
{
while (*str != '\0')
{
USARTx_SendChar(USARTx, *str++);
}
}
/**
* @brief 接收一个字符从串口
* @param USARTx 串口号
* @return 接收到的字符
*/
char USARTx_ReceiveChar(USART_TypeDef* USARTx)
{
while (!(USARTx->SR & USART_SR_RXNE));
return USART_ReceiveData(USARTx) & 0xff;
}
/**
* @brief 接收一个字符串从串口
* @param USARTx 串口号
* @param buf 存储字符串的缓冲区
* @param size 缓冲区大小
* @return 字符串的长度
*/
size_t USARTx_ReceiveString(USART_TypeDef* USARTx, char* buf, size_t size)
{
size_t len = 0;
char ch;
while (len < size - 1)
{
ch = USARTx_ReceiveChar(USARTx);
if (ch == '\r' || ch == '\n')
{
break;
}
buf[len++] = ch;
}
buf[len] = '\0';
return len;
}
阅读全文