stm32f103c8t6最小系统板串口2使用
时间: 2025-03-24 09:05:12 浏览: 160
### STM32F103C8T6 最小系统板串口2配置方法
STM32F103C8T6 是一款基于 ARM Cortex-M3 内核的微控制器,其最小系统板提供了丰富的外设支持功能,其中包括多个 USART 接口用于串行通信。要使用 STM32 的串口 2 (USART2),需要完成硬件连接和软件初始化两方面的工作。
#### 硬件连接
在 STM32F103C8T6 中,USART2 默认映射到 PA2 和 PA3 引脚,其中 PA2 作为 TX(发送),PA3 作为 RX(接收)。如果最小系统板未提供专用的 UART/USART 调试接口,则需手动确认这些引脚的位置并将其连接至外部设备或调试工具[^2]。
#### 软件初始化过程
以下是实现 USART2 初始化的主要步骤:
1. **启用时钟**
在使用任何外设之前,必须先开启对应的时钟信号。对于 USART2 来说,它位于 APB1 总线上,因此需要打开 APB1 外设时钟以及 GPIOA 的时钟。
2. **配置 GPIO 引脚模式**
将 PA2 设置为复用推挽输出模式以供传输数据;将 PA3 配置成浮空输入或者上下拉输入来接受数据流。
3. **设置波特率及其他参数**
定义通讯速率(如9600bps)、字长(通常为8bit)、停止位数、校验方式等基本属性。
4. **使能中断与 DMA 可选操作** (视项目需求而定)
下面给出一段简单的代码示例展示如何启动 USART2 并打印字符串 “Hello World!” 到终端:
```c
#include "stm32f1xx.h"
void USART2_Init(void){
// Enable clocks for GPIOA and USART2 peripherals.
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
// Configure PA2 as AF mode push-pull output for TX pin of USART2.
GPIOA->MODER &= ~(GPIO_MODER_MODE2_Msk);
GPIOA->MODER |= GPIO_MODER_MODE2_1;
// Set speed to high-speed setting.
GPIOA->OSPEEDR |= GPIO_OSPEEDER_SPEED2_Msk;
// Alternate function selection register configuration.
GPIOA->AFR[0] |= (7 << ((uint32_t)(2 & 0xF)*4));
// For simplicity we skip configuring the receive pin here.
/* Initialize usart */
USART2->CR1 = 0; // Reset control registers first.
USART2->BRR = SystemCoreClock / 9600; // Baud rate set at 9600 bps assuming system clock is known.
USART2->CR1 |= USART_CR1_TE | USART_CR1_RE;// Enable both transmitter and receiver parts.
USART2->CR1 |= USART_CR1_UE; // Finally enable entire USART block after all settings done.
}
// Function sends one character over USART2 interface.
char putchar(char c){
while (!(USART2->SR & USART_SR_TXE)); // Wait until transmit data register empty flag gets raised indicating ready state.
USART2->DR = (c & 0xFF); // Write byte into DR which automatically starts transmission process once written there.
return c;
}
int main(){
char *msg="Hello world!\n";
int i=0;
USART2_Init();
do{
putchar(*msg++);
}while(*(msg+i++));
while(1){};
}
```
上述程序片段展示了基础的功能实现[^3]。需要注意的是实际应用中可能还需要处理更多细节比如错误检测机制加入等等。
#### 注意事项
- 如果计划利用更高频率工作则应重新计算合适的分频系数调整 `BRR` 寄存器值从而匹配目标波特率精度要求。
- 当前例子仅演示同步阻塞式的字符写入函数,在实时性强的任务场景下建议采用异步回调或是DMA方式进行优化提升效率减少CPU占用时间比例[^4]。
阅读全文
相关推荐


















