stm32f030 串口例程
时间: 2023-09-15 21:22:17 浏览: 92
以下是一个简单的STM32F030串口例程:
#include "stm32f0xx.h"
void USART1_Init(void) {
RCC->APB2ENR |= RCC_APB2ENR_USART1EN; //使能USART1时钟
RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //使能GPIOA时钟
//配置PA9为USART1的TX引脚,PA10为USART1的RX引脚
GPIOA->MODER |= GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1;
GPIOA->AFR[1] |= (1 << GPIO_AFRH_AFSEL9_Pos) | (1 << GPIO_AFRH_AFSEL10_Pos);
USART1->BRR = 48000000 / 115200; //设置波特率为115200
USART1->CR1 |= USART_CR1_TE | USART_CR1_RE | USART_CR1_UE; //使能发送和接收,使能USART1
}
void USART1_SendChar(char c) {
while (!(USART1->ISR & USART_ISR_TXE)) {} //等待发送缓冲区为空
USART1->TDR = c; //发送字符
}
void USART1_SendString(char *s) {
while (*s) {
USART1_SendChar(*s++);
}
}
char USART1_ReadChar(void) {
while (!(USART1->ISR & USART_ISR_RXNE)) {} //等待接收缓冲区非空
return USART1->RDR; //读取接收到的字符
}
int main(void) {
USART1_Init();
char msg[] = "Hello, world!\n\r";
USART1_SendString(msg);
while (1) {
char c = USART1_ReadChar();
USART1_SendChar(c);
}
}
该例程初始化了USART1串口,并通过USART1发送了一条字符串。在主函数中,该例程进入了一个死循环,不断等待来自USART1的字符,并将其发送回去。可以通过串口助手等工具来测试该例程的接收和发送功能。
阅读全文