1. 项目概述与硬件选型
STM32F103系列作为经典的Cortex-M3内核微控制器,在工业控制、物联网终端等场景中仍有广泛应用。这次项目需要同时实现四路串口通讯、多通道ADC采集和PWM输出,对芯片资源分配和外设管理提出了较高要求。
选择STM32F103C8T6这款64引脚型号主要基于以下考量:
- 内置4个独立USART接口(USART1-4)
- 3个12位ADC(16通道),采样率可达1MHz
- 4个通用定时器(TIM2-5)+2个高级定时器(TIM1、TIM8)
- 64KB Flash + 20KB SRAM的存储配置
- 72MHz主频下功耗仅36mA(全速运行)
硬件设计要点:使用外部8MHz晶振配合PLL倍频,模拟部分采用独立的3.3V LDO供电,ADC参考电压引脚增加10uF+0.1uF去耦电容。PCB布局时将数字地和模拟地通过0Ω电阻单点连接。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 四路串口并行通讯实现
2.1 外设初始化配置
多串口并行的关键在于正确配置时钟树和中断优先级。USART1/2/3挂在APB2总线,USART4挂在APB1总线,初始化时需分别使能对应时钟:
c复制// 时钟使能示例
__HAL_RCC_USART1_CLK_ENABLE(); // APB2
__HAL_RCC_UART4_CLK_ENABLE(); // APB1
// GPIO配置要点
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
2.2 DMA+IDLE中断接收方案
传统轮询方式在四路串口场景下会导致CPU负载过高,推荐采用DMA循环接收配合串口空闲中断的方案:
c复制// DMA配置关键参数
hdma_usart1_rx.Instance = DMA1_Channel5;
hdma_usart1_rx.Init.Mode = DMA_CIRCULAR; // 循环模式
hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE;
hdma_usart1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
// 启动接收
HAL_UA
