资讯详情

实验二:标准外设库方式流水灯与Keil仿真

发布时间:2026/9/30 5:50:03

500+
企业客户服务经验
120+
行业领域内容覆盖
3000+
原创页面设计沉淀
98%
客户满意度

实验二:标准外设库方式流水灯与Keil仿真

一、实验目的掌握STM32标准外设库SPL的工程搭建与GPIO库函数用法用标准外设库实现LED轮流闪烁使用Keil软件仿真逻辑分析仪观察GPIO输出波形分析闪烁周期。二、实验硬件元件引脚说明红色LEDPA0高电平亮蓝色LEDPA2高电平亮绿色LEDPB0高电平亮板载LEDPC13低电平亮三、工程项目创建与添加库文件详细过程3.1 新建Keil工程打开Keil μVision5 → Project → New μVision Project选择保存路径命名为Task2_SPL器件选择窗口选STMicroelectronics → STM32F1 Series → STM32F103 → STM32F103C8弹出Manage Run-Time Environment先点Cancel后面手动加库。3.2 目录结构在工程文件夹下建立如下结构Task2_SPL/ ├── Libraries/ │ ├── inc/ 标准外设库头文件 │ │ ├── stm32f10x.h │ │ ├── stm32f10x_gpio.h │ │ ├── stm32f10x_rcc.h │ │ ├── core_cm3.h │ │ ├── system_stm32f10x.h │ │ └── stm32f10x_conf.h │ └── src/ 标准外设库源文件 │ ├── stm32f10x_gpio.c │ ├── stm32f10x_rcc.c │ ├── system_stm32f10x.c │ └── misc.c ├── Startup/ │ └── startup_stm32f10x_md.s 启动文件 ├── User/ │ └── main.c └── Listings/ Objects/ 编译输出3.3 添加源文件到Keil在Keil左侧Project面板右键Source Group 1→ Add Existing Files选择Libraries/src/下的stm32f10x_gpio.cstm32f10x_rcc.csystem_stm32f10x.cmisc.c再把startup_stm32f10x_md.s和User/main.c加进来。3.4 配置头文件路径与宏右键工程 →Options for Target或按AltF7切到C/C选项卡Include Paths点…加入../Libraries/inc ../UserDefine框中填入USE_STDPERIPH_DRIVER, HSE_VALUE8000000切到Debug选项卡选Use Simulator软件仿真点Settings→ 仿真选项卡中Dialog DLL保持默认点OK保存。四、程序代码#includestm32f10x.h/* 软件延时约1ms8MHz主频粗略值 */voidDelay_ms(volatileunsignedintms){unsignedinti,j;for(i0;ims;i)for(j0;j800U;j){;}}intmain(void){GPIO_InitTypeDef GPIO_InitStruct;/* 1. 开GPIOA/B/C和AFIO时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);/* 2. PA0、PA2 推挽输出50MHz */GPIO_InitStruct.GPIO_PinGPIO_Pin_0|GPIO_Pin_2;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStruct);/* 3. PB0 推挽输出50MHz */GPIO_InitStruct.GPIO_PinGPIO_Pin_0;GPIO_Init(GPIOB,GPIO_InitStruct);/* 4. PC13 推挽输出50MHz */GPIO_InitStruct.GPIO_PinGPIO_Pin_13;GPIO_Init(GPIOC,GPIO_InitStruct);/* 5. 初始全灭外接灯写0板载灯写1 */GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2);GPIO_ResetBits(GPIOB,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_13);/* 6. 流水循环 */while(1){/* 红灯 PA0 */GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(1000);GPIO_ResetBits(GPIOA,GPIO_Pin_0);/* 蓝灯 PA2 */GPIO_SetBits(GPIOA,GPIO_Pin_2);Delay_ms(1000);GPIO_ResetBits(GPIOA,GPIO_Pin_2);/* 绿灯 PB0 */GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(1000);GPIO_ResetBits(GPIOB,GPIO_Pin_0);/* 板载灯 PC13低电平亮 */GPIO_ResetBits(GPIOC,GPIO_Pin_13);Delay_ms(1000);GPIO_SetBits(GPIOC,GPIO_Pin_13);}}五、Keil软件仿真逻辑分析仪观察波形5.1 操作步骤编译通过后按CtrlF5进入Debug仿真菜单View → Analysis Windows → Logic Analyzer在弹出的Logic Analyzer窗口点Setup左上角点New(Insert)依次添加PORTA.0红灯PORTA.2蓝灯PORTB.0绿灯每个信号的Display Type改为Bit点Close然后按F5运行波形绘制出来后用Zoom In/Out调整时间轴。5.2 仿真波形图5.3 波形分析信号引脚高电平时间低电平时间周期红色PA0约1s约3s约4s蓝色PA2约1s约3s约4s绿色PB0约1s约3s约4s三个引脚均为方波高电平宽度约1秒对应每只灯点亮的时间低电平约3秒对应其余3只灯轮流亮的时间三路信号相位依次错开符合流水灯逻辑高低电平转换周期LED闪烁周期实测约为1秒与软件延时目标值基本一致软件循环延时不是精确1秒受编译器优化和指令周期影响若需精确周期应改用SysTick定时器。六、实验总结通过本实验掌握了标准外设库的工程搭建方法学会了用库函数RCC_APB2PeriphClockCmd、GPIO_Init、GPIO_SetBits等快速配置GPIO并使用Keil逻辑分析仪直观观察到了流水灯的输出时序波形验证了代码逻辑的正确性。
热门专题

继续阅读更多专题内容

围绕企业服务、数字化转型与官网运营的常青话题,持续输出深度内容

企业官网建设指南 企业托管服务模式 财税政策与解读 企业数字化转型 官网SEO与获客 网站安全与运维
配套服务

读完这篇文章,了解更多服务

从整站搭建到SEO布局,17项核心服务助您打造高转化的企业官网

01

企业托管整站搭建

从信息架构到栏目预留,搭建可生长的企业站点骨架,每个页面独立原创设计。...

了解详情
02

规整可信网页设计

雪地靴温暖风原创设计,金属铜线条贯穿全页,拒绝通用模板与AI流水线。...

了解详情
03

企业服务SEO布局

关键词体系与语义化结构,从建站源头为搜索排名而生。...

了解详情
04

业务预约咨询表单

多场景表单与线索收集体系,把访问流量转化为可追踪的销售线索。...

了解详情
05

企业服务站点运维

安全巡检、数据备份与内容更新支持,全年守护网站稳定运行。...

了解详情
06

全终端商务适配

电脑、平板、手机一致呈现,移动端体验与转化同样出色。...

了解详情
需要专业建议?

让专业顾问为您解读行业趋势

关于企业官网建设、SEO获客与数字化转型的任何疑问,欢迎一对一咨询我们的专业顾问。