尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

了解STM32最小系统核心板

了解STM32最小系统核心板 STM32F103C8T6 多端口流水灯实验报告STM32F103C8T6 多端口流水灯实验报告博客发布 / 学习通提交 Markdown可直接导出 PDF配套代码、git 操作说明完整满足作业要求芯片STM32F103C8T6Blue Pill 蓝板最小系统功能GPIOA/GPIOB/GPIOC 三个端口各 1 只 LED 板载 PC13 LED4 个 LED 轮流闪烁间隔 1s一、实验目的认识 STM32F103C8T6 最小系统Blue Pill硬件组成了解最小系统核心电路。掌握 STM32 GPIO 寄存器底层操作理解 GPIO 端口时钟、模式、输出寄存器配置。使用 GPIOA、GPIOB、GPIOC 三个不同端口引脚外接 LED实现轮流闪烁同时复用板载 PC13 LED 加入流水灯序列。学会 Keil 工程创建、代码编译、程序烧录掌握 Git 基础命令将工程上传至 Gitee/GitHub 代码仓库。二、实验器材STM32F103C8T6 最小系统板Blue Pill面包板、杜邦线LED 发光二极管 ×3红、绿、蓝220Ω 限流电阻 ×3ST-LINK 下载器Keil MDK5 开发环境Git 工具、Gitee/GitHub 账号三、硬件电路设计3.1 最小系统简介STM32F103C8T6 最小系统包含主芯片、8MHz 外部高速晶振 HSE、32.768K RTC 晶振、复位电路、BOOT 启动配置电路、电源稳压、下载接口。板载 LED 连接在PC13 引脚LED 是低电平点亮PC13 输出 0灯亮输出 1灯灭。3.2 外接 LED 硬件接线全部 LED 采用灌电流接法GPIO 引脚输出低电平点亮 LED串联 220Ω 限流电阻保护 LED。| LED 编号 | 端口引脚 | 颜色 | 接线说明 || ---- | ---- | ---- | ---- || LED1 | PA0GPIOA | 红 | PA0 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED2 | PB0GPIOB | 绿 | PB0 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED3 | PC1GPIOC | 蓝 | PC1 → 220Ω 电阻 → LED 阳极LED 阴极 → GND || LED4板载 | PC13GPIOC | 板载 | 板载自带无需外接元件低电平点亮 |原理引脚输出低电平 0V电流从 3.3V 经过 LED、电阻流入 GPIO 引脚LED 点亮引脚输出高电平 3.3V两端无压差LED 熄灭。3.3 电路原理图本实验电路原理图由STM32最小系统核心电路与多路LED流水灯驱动电路两部分组成整体采用3.3V直流供电所有LED均为灌电流驱动接法电路结构简洁、稳定性高适配本次多端口LED轮流点亮的实验需求。一、原理图整体架构供电电路由最小系统板5V/3.3V稳压电路输出稳定3.3V电压为芯片及所有LED外设提供工作电源杜绝电压波动导致的器件异常。主控电路以STM32F103C8T6主控芯片为核心搭载8MHz外部晶振电路提供系统时钟、复位电路实现系统重启、BOOT配置电路保障正常上电启动构成完整最小工作系统。外设驱动电路包含4路LED指示电路其中3路为外接独立LED电路1路为板载LED电路分别对应不同GPIO端口实现多端口独立控制。二、详细引脚电路连接原理图核心参数外接LED电路3路外设电路电路结构完全一致均采用“GPIO引脚220Ω限流电阻LED指示灯接地”的标准灌电流电路。PA0、PB0、PC1三个引脚分别串联1颗220Ω限流电阻限流电阻可限制回路最大电流避免过流烧毁LED灯珠及芯片GPIO引脚电阻另一端对应接入红、绿、蓝三色LED阳极所有LED阴极统一接入电路GND地端。板载LED电路板载LED固定连接主控芯片PC13引脚电路内置限流保护元件无需外接电阻电路结构精简默认低电平触发点亮、高电平熄灭。三、电路工作原理电路通电后STM32最小系统正常上电启动系统时钟初始化完成GPIO端口配置为通用推挽输出模式。当对应GPIO引脚输出低电平0V时3.3V电源、LED灯珠、限流电阻、GPIO引脚形成完整闭合回路产生工作电流LED点亮当引脚输出高电平3.3V时电路两端无电压压差回路无电流LED熄灭。通过程序循环控制PA0、PB0、PC1、PC13四个引脚的电平状态分时拉低不同端口电平、其余端口保持高电平即可实现四路LED依次轮流点亮、循环流水的实验效果。同时220Ω限流电阻起到核心保护作用将回路电流控制在LED额定工作范围内保障电路长期稳定运行。四、原理图设计要点所有LED采用共地设计电路布线规整有效避免多路灯光串扰问题严格匹配限流电阻阻值兼顾LED亮度与器件安全无过流、欠流问题多端口GPIO独立布线互不干扰可实现单路独立控制满足流水灯逻辑需求。四、程序设计思路 寄存器说明4.1 设计思路开启 GPIO 端口时钟RCC 寄存器GPIOA/GPIOB/GPIOC 挂载在 APB2 总线上打开对应端口时钟。配置 GPIO 模式寄存器 CRL/CRH将 PA0、PB0、PC1、PC13 设置为通用推挽输出模式最大速度 2MHz。输出控制使用 ODR 输出寄存器写 0 点亮 LED写 1 熄灭 LED。简单软件延时函数循环空操作实现约 1s 延时裸机无 SysTick简单软件延时适合本实验。流水逻辑依次点亮 1 个 LED其余全部熄灭延时 1s切换下一个循环PA0 → PB0 → PC1 → PC13循环往复。4.2 寄存器地址与详细参数重点答题部分STM32F103 内核Cortex-M3APB2 外设基地址 0x40010000RCC 时钟寄存器RCC_APB2ENR地址0x40021018位定义Bit2IOPAEN 1 → 开启 GPIOA 时钟Bit3IOPBEN 1 → 开启 GPIOB 时钟Bit4IOPCEN 1 → 开启 GPIOC 时钟GPIOA 寄存器组基地址0x40010800GPIOA_CRL端口配置低寄存器0x40010800控制 PA0~PA7PA0CNF00 (通用推挽输出)MODE01 (输出速度 2MHz)对应 bit0~bit3 0011GPIOA_ODR输出寄存器0x4001080Cbit0 控制 PA0 输出电平GPIOB 寄存器组基地址0x40010C00GPIOB_CRL0x40010C00PB0bit0~bit3 0011推挽输出 2MHzGPIOB_ODR0x40010C0Cbit0 控制 PB0GPIOC 寄存器组基地址0x40011000GPIOC_CRL0x40011000PC1 在 CRLbit4~bit70011GPIOC_CRH0x40011004PC13 在 CRHbit20~bit230011GPIOC_ODR0x4001100Cbit1、bit13 分别控制 PC1、PC13CNF [1:0]00 推挽输出MODE [1:0]01 → 2MHz 输出速度。五、C 语言 寄存器版完整代码带详细注释新建 main.c直接复制纯寄存器操作不调用标准库函数//STM32F103C8T6 寄存器版本流水灯//PA0、PB0、PC1外接LEDPC13板载LED轮流闪烁间隔1s#include “stm32f10x.h”//寄存器宏定义直接映射地址#define RCC_APB2ENR (*(volatile unsigned int *)0x40021018)//GPIOA 寄存器#define GPIOA_CRL (*(volatile unsigned int)0x40010800)#define GPIOA_ODR ((volatile unsigned int *)0x4001080C)//GPIOB 寄存器#define GPIOB_CRL (*(volatile unsigned int)0x40010C00)#define GPIOB_ODR ((volatile unsigned int *)0x40010C0C)//GPIOC 寄存器#define GPIOC_CRL (*(volatile unsigned int)0x40011000)#define GPIOC_CRH ((volatile unsigned int)0x40011004)#define GPIOC_ODR ((volatile unsigned int *)0x4001100C)/**brief 软件延时函数简单空循环大约延时1s72MHz系统时钟*/void Delay1s(void){unsigned int i,j;for(i0;i1000;i)for(j0;j7200;j);}/**brief GPIO初始化PA0 PB0 PC1 PC13 推挽输出*/void LED_GPIO_Init(void){//1. 开启APB2端口时钟Bit2 IOPA、Bit3 IOPB、Bit4 IOPC置1RCC_APB2ENR | (12) | (13) | (14);// GPIOA PA0配置推挽输出2MHzGPIOA_CRL ~(0x0F 0); //清空PA0对应的4位GPIOA_CRL | (0x03 0); //MODE01,CNF00 →00110x03GPIOA_ODR | (10); //PA0初始高电平LED熄灭// GPIOB PB0配置推挽输出2MHzGPIOB_CRL ~(0x0F 0);GPIOB_CRL | (0x03 0);GPIOB_ODR | (10); //PB0初始高电平LED熄灭// GPIOC PC1配置推挽输出2MHzGPIOC_CRL ~(0x0F 4); //PC1对应bit4~bit7GPIOC_CRL | (0x03 4);GPIOC_ODR | (11); //PC1初始高电平LED熄灭// GPIOC PC13配置推挽输出2MHzPC13在CRH寄存器每组4bit13号引脚对应第5组(bit20~23)GPIOC_CRH ~(0x0F 20);GPIOC_CRH | (0x03 20);GPIOC_ODR | (113); //PC13初始高电平板载LED熄灭}int main(void){LED_GPIO_Init(); //初始化GPIOwhile(1) { //第1步点亮PA0其余全部熄灭 GPIOA_ODR ~(10); //PA0输出低亮 GPIOB_ODR | (10); GPIOC_ODR | (11) | (113); Delay1s(); //第2步点亮PB0其余熄灭 GPIOA_ODR | (10); GPIOB_ODR ~(10); GPIOC_ODR | (11) | (113); Delay1s(); //第3步点亮PC1其余熄灭 GPIOA_ODR | (10); GPIOB_ODR | (10); GPIOC_ODR ~(11); GPIOC_ODR | (113); Delay1s(); //第4步点亮PC13板载LED其余熄灭 GPIOA_ODR | (10); GPIOB_ODR | (10); GPIOC_ODR | (11); GPIOC_ODR ~(113); Delay1s(); }}六、实验步骤硬件搭建面包板接入 3 只 LED220Ω 电阻分别连接 PA0、PB0、PC1 到 LED 阳极LED 阴极接 GND。Keil MDK 新建 STM32F103C8 工程添加 main.c选择芯片 STM32F103C8T6配置 ST-LINK 下载。编译工程检查无报错将程序烧录进最小系统板。上电测试4 个 LED 按照 PA0→PB0→PC1→PC13 顺序轮流点亮间隔 1 秒循环。现象观察每时刻只有 1 个灯亮其余熄灭循环流水。七、实验现象与结果烧录程序上电后八、实验分析与问题总结PC13 板载 LED 特性Blue Pill 板上 PC13LED 是低电平点亮很多新手容易写反电平出现常亮 / 不亮。软件延时本实验是简单循环延时精度不高适合演示高精度延时需要使用 SysTick 定时器。寄存器配置注意CRL 控制引脚 0\7CRH 控制引脚 8\15PC13 属于 CRH不能写到 CRL。必须开启端口时钟不开启 RCC 时钟GPIO 寄存器无法读写LED 完全不动作是最常见错误。
返回列表