
先编译一次不改任何代码确认工程本身能编译、下载、串口是否有基础输出。先记录原始状态后面出错才知道是自己改坏还是题目工程本来就缺东西。先看main.c只看四块int main(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_XXX_Init();/* USER CODE BEGIN 2 */while (1){/* USER CODE BEGIN 3 */}}你要回答四个问题系统时钟是多少初始化了哪些外设哪些外设已经启动主循环现在做了什么特别注意USER CODE BEGIN 2与USER CODE BEGIN 3比赛时自己补的初始化通常放BEGIN 2循环任务放BEGIN 3。看题目涉及的外设配置文件例如题目有 ADC、PWM、串口就依次看adc.ctim.cusart.cgpio.cdma.c只找关键参数不要逐行硬看比如看到ADC :道通是哪个引脚?连续还是定时器触发DMA多长TIM时钟源、PSC、ARR、PWM通道、TRGO、中断USART哪个串口、波特率、是否开启中断/DMA4.再看中断入口和回调这是最容易漏掉的一层。顺序看stm32f1xx_it.cTIMx_IRQHandler/DMAx_IRQHandler/USARTX_IRQHandlerHAL_TIM_IRQHander/HAL_DAM_IRQHandlerHAL_TIM_PeriodElapsedCallback等回调你要明确谁触发中断中断最终调用了哪个函数这个函数只置标志还是直接做运算原则上中断收数据、置标志、推进简单状态主循环FFT、PI、协议解析、串口打印按“数据流”读不按文件顺序读例如赛题是“ADC 采样 → 运算 → PWM 控制”就画成硬件输入ADC通道DMA缓冲区DMA回调置标志main while处理数据控制算法TIM CCR / PWM输出例如通信题串口/SPI/ADC→ 中断或 DMA→ 缓冲区→ 主循环解析→ 命令/状态机→ DAC、PWM、GPIO 输出只要这条线能画出来你就知道代码该补在哪里。用搜索快速定位不要手翻比赛时优先搜这些词main(MX_HAL_TIM_PeriodElapsedCallbackHAL_ADC_ConvCpltCallbackHAL_UART_RxCpltCallbackHAL_GPIO_EXTI_CallbackHAL_TIM_PWM_StartHAL_TIMEx_PWMN_StartHAL_ADC_Start_DMAHAL_UART_Transmit最后才开始补代码先做最小验证不直接写完整功能PWM示波器确认频率、占空比、互补输出ADC串口打印原始值和电压UART收发一个字节或一行文本SPI先读 Flash IDDAC先固定输出 1.65VPI先开环再接反馈最后启用 PI最重要的一句是先确认“数据是否正确进入单片机、控制是否正确离开单片机”再讨论算法