ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32实验二——标准外设库(SPL)与Keil逻辑分析仪波形观察

STM32实验二——标准外设库(SPL)与Keil逻辑分析仪波形观察 前言在完成了实验一纯寄存器方式点亮流水灯之后实验二要求我们改用标准外设库SPL并使用 Keil MDK 的软件仿真逻辑分析仪 来观察 GPIO 端口的时序波形验证软件循环延时的准确周期。本文将详细记录标准库工程的搭建过程、代码实现以及在 Keil 中抓取波形的曲折经历和最终解决方案。一、 实验目的掌握 STM32 标准外设库Standard Peripheral Library, SPL的工程搭建方法。理解 SPL 中 RCC、GPIO 相关函数的调用逻辑。学会使用 Keil MDK 的软件仿真Simulator模式并使用逻辑分析仪Logic Analyzer观察引脚的时序波形。分析软件循环延时函数的准确性计算 LED 闪烁的实际周期。二、 实验环境与硬件硬件STM32F103C8T6 最小系统板、面包板、红绿LED灯、限流电阻、杜邦线。软件Keil MDK V5.06、STM32F10x_StdPeriph_Lib_V3.5.0 标准库。三、 标准外设库SPL工程搭建详细过程文件与目录准备在工程根目录下新建 Libraries 文件夹复制官方标准外设库的源码。在 Keil 中建立四个组Startup、CMSIS、Library、User。依次向对应组内添加文件Startupstartup_stm32f10x_md.sCMSIScore_cm3.c、system_stm32f10x.cLibrarystm32f10x_rcc.c、stm32f10x_gpio.cUser新建 main.c魔术棒配置关键在 C/C 选项卡的 Define 框里填写USE_STDPERIPH_DRIVER。在 Include Paths 中添加三个头文件路径StdPeriph_Driver\inc、CMSIS\CM3\DeviceSupport\ST\STM32F10x、CMSIS\CM3\CoreSupport。踩坑记录编译时若提示找不到 stm32f10x_conf.h需手动创建该文件内容通常包含 #define assert_param(expr) ((void)0) 以及必要外设的引用。四、 核心代码SPL 方式c #include stm32f10x.h // 粗略软件延时函数 void Delay_ms(uint32_t ms) { for(uint32_t i 0; i ms; i) for(uint32_t j 0; j 8000; j); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; // 1. 开启 GPIOA, GPIOB, GPIOC 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE); // 2. 配置 PA0、PB0、PC13 为推挽输出 GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_Init(GPIOB, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_13; GPIO_Init(GPIOC, GPIO_InitStructure); // 初始熄灭状态 GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_13); // 板载PC13高电平熄灭 while(1) { GPIO_SetBits(GPIOA, GPIO_Pin_0); Delay_ms(1000); GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOB, GPIO_Pin_0); Delay_ms(1000); GPIO_ResetBits(GPIOB, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_13); Delay_ms(1000); GPIO_SetBits(GPIOC, GPIO_Pin_13); } }延时周期分析在默认 72MHz 主频下内层循环 j 8000 大约耗时 1 毫秒因此 Delay_ms(1000) 约为 1 秒。LED 亮灭间隔约为 1 秒整个闪烁周期为 2 秒占空比 50%。五、 逻辑分析仪波形观察与“踩坑”记录踩坑在 Keil 中使用 Use Simulator 纯软件仿真时因标准库代码会直接访问物理寄存器如 0x40021000 时钟寄存器仿真器没有外设模型直接报错 access violation导致逻辑分析仪无法抓取信号。解决方案在仿真启动前在 Command 窗口输入 map 0x40000000, 0x400FFFFF read write 解除地址访问限制。为了直观展示 GPIO 的时序逻辑我们定义了 volatile uint32_t debug_PA0、debug_PB0、debug_PC13 三个变量在主循环中同步 GPIO 的输出状态然后用逻辑分析仪直接观察这三个变量。波形分析通过逻辑分析仪波形可知PA0、PB0、PC13 对应输出为周期 2 秒的方波高电平 1 秒低电平 1 秒时序状态正确验证了软件循环延时的可靠性。六、 实验总结本次实验成功从寄存器操作过渡到了 SPL 标准库开发虽然 Keil 纯软件仿真在 STM32F1 上存在兼容性问题但通过 map 映射和虚拟变量同步我们依然完美验证了 GPIO 的时序逻辑加深了对底层寄存器与库函数对应关系的理解。
返回列表