梁山派学习笔记1
BOOT配置BOOT是什么1. 最简单比喻开机选系统你可以把STM32单片机想象成一台小电脑电脑开机可以选Windows、U盘启动盘、PE维护系统单片机上电靠BOOT引脚选「从哪里读程序运行」这两个引脚就叫BOOT0、BOOT1。BOOT Bootloader 启动选择开关2. 单片机里三块能放程序的地方单片机内部有3块存储区域上电只能选其中一块启动主FLASH日常用用ST-Link下载的固件就存在这里掉电不丢失产品正常工作就走这个。系统存储器出厂自带串口下载工具芯片出厂时厂家提前烧好一段专用小程序功能是通过串口接收新程序写到FLASH里。不用调试器只用串口就能烧录代码。片上SRAM内存断电清空临时内存代码放这里断电就没只用于临时调试。3. BOOT0、BOOT1两个引脚的作用上电瞬间单片机会立刻读取这两个引脚的高低电平根据电平组合决定“从哪一块区域启动”BOOT0BOOT1启动位置通俗场景0xFLASH正常跑自己写的程序平时默认10系统存储串口下载程序11SRAM内存临时调试代码若使用串口下载需要配置为ISP模式也就是将BOOT0置1 BOOT1置0 在梁山派下载的时候先按下BOOT0按键再按复位按键最后点击软件上的下载4. 补充只上电瞬间生效BOOT引脚只在开机/重启那一刻起作用单片机正常运行后你再按按键改变电平不会有任何效果。BOOT1是复用引脚PB2只有开机那一瞬间它是启动选择脚程序跑起来之后PB2可以当成普通IO口控制LED、按键等外设。5.BOOT引脚为什么下拉电阻一、不接下拉电阻引脚悬空浮空的危害BOOT引脚如果什么都不连接属于高阻浮空状态存在严重隐患引脚无固定电压静电、周边走线干扰、人手触碰都会造成电压随机飘移电平高低完全不可控上电时芯片误判BOOT电平故障现象随机有时正常FLASH启动、有时自动进入串口下载模式、甚至直接死机跑飞问题极难复现排查。二、10k下拉电阻接地三大核心作用电阻一端接BOOT引脚一端接GND实现稳定默认低电平锁定默认启动电平按键松开无3.3V输入时强制BOOT引脚稳定为0电平上电固定从主FLASH启动启动模式不会随机错乱。不干扰按键高电平输入按键按下后3.3V直接接入引脚电源驱动能力远强于10k下拉电阻引脚会被强制拉为高电平下拉电阻不会屏蔽按键信号。限流保护硬件按键按下瞬间3.3V通过10k电阻流向GND限制回路电流若无电阻会直接3.3V与GND短路大电流烧毁芯片引脚或电源。三、阻值选型为什么统一用10k不用1k/100k阻值缺点1k过小按键按下时对地电流大持续消耗电能功耗高100k过大引脚阻抗太高抗干扰能力差轻微静电就能拉高电平容易误触发启动模式10k标准值功耗低、抗干扰能力均衡是单片机IO上下拉通用折中阻值四、一句话总结10k下拉电阻作用给BOOT引脚提供稳定默认低电平避免浮空电平乱跳保证上电启动模式可控同时起到限流保护电路的效果。GD32工程目录结构说明文件夹名称存放内容说明Project存放工程文件、编译生成中间文件、烧录文件等Firmware存放ARM CMSIS内核文件、GD32标准外设库底层文件Hardware存放开发板各类外设硬件驱动OLED、DHT11、LED等驱动App存放项目业务应用层逻辑代码功能业务处理User存放main主函数、gd32f4xx_it中断文件、systick系统滴答文件Doc存放readme、工程介绍、接线说明等文档资料存储器一、存储器基础概念存储器是大量存储单元的集合用于存储程序、数据信息按使用类型分为两大类分类说明ROM 只读存储器断电数据不丢失存放程序固件RAM 随机存储器断电数据丢失运行时临时缓存变量二、存储器映射相关知识点1. 存储器映射存储器本身无地址只是功能存储单元由芯片厂商分配地址给存储单元分配地址的过程称为存储器映射。分配地址后可通过指针直接操作对应内存地址。2. 存储器映射表GD32 为32位单片机总寻址空间2324GB2^{32}4\mathrm{GB}2324GB存储映射遵循 Cortex-M4 内核统一规则降低软件移植复杂度地址空间划分固定区域Cortex-M4 系统内核外设占用地址不可修改自定义区域剩余地址由兆易创新芯片厂商分配给片上外设。3. 寄存器映射寄存器本质拥有专属功能的特殊内存单元读写寄存器即可控制外设操作逻辑每个外设寄存器有固定起始地址可用C语言指针访问寄存器映射定义对已分配地址、具备特定功能的内存单元定义别名这个别名就是寄存器名。4. 总线基地址片上外设挂载3条总线总线速度区分适配不同外设运行速率总线最高时钟特点AHB200MHz高速外设挂载APB2100MHz中高速外设挂载APB150MHz低速外设挂载总线最小起始地址称为总线基地址也是该总线挂载第一个外设的起始地址。5. 总线基地址与地址范围配套参考图6. 外设基地址每条总线下包含多个外设每个外设拥有独立起始地址即外设基地址。配套参考图7. 外设寄存器地址单个外设内部包含多个功能寄存器每个寄存器相对外设基地址有固定偏移地址。寄存器完整地址 外设基地址 寄存器偏移量配套参考图三、两种寄存器操作方式实例GPIOA全部引脚置高计算示例GPIOA 基地址0x40020000输出寄存器 OCTL 偏移0x14寄存器完整地址0x400200000x140x400200140\mathrm{x}40020000 0\mathrm{x}14 0\mathrm{x}400200140x400200000x140x40020014方式1绝对地址直接访问// GPIOA 16个引脚全部输出高电平*(unsignedint*)(0x40020014)0xFFFF;方式2宏定义别名访问写法1宏为地址指针#defineGPIOA_OCTL(unsignedint*)(0x40020014)*GPIOA_OCTL0xFFFF;写法2宏直接封装解引用常用标准库写法#defineGPIOA_OCTL*(unsignedint*)(0x40020014)GPIOA_OCTL0xFFFF;LED一、LED 电气参数压降与工作电流直插 LED 参数直插LED类型压降范围红色发光二极管2.0~2.2V黄色发光二极管1.8~2.0V绿色发光二极管3.0~3.2V额定正常工作电流20mA1.2 贴片 LED 参数贴片LED类型压降范围工作电流红色发光二极管1.82~1.88V5~8mA绿色发光二极管1.75~1.82V3~5mA蓝色发光二极管3.1~3.3V8~10mA二、梁山派板载 LED 硬件电路三、LED 限流电阻计算公式计算公式原理单片机系统供电电压3.3V电阻分压公式URVCC−VLEDU_R V_{CC} - V_{LED}URVCC−VLED欧姆定律RURIR \dfrac{U_R}{I}RIUR计算示例已知贴片红色LED压降1.8V工作电流取5mA1电阻分担电压3.3V−1.8V1.5V3.3V - 1.8V 1.5V3.3V−1.8V1.5V2电阻阻值R1.5V5mA300ΩR \dfrac{1.5V}{5mA} 300\OmegaR5mA1.5V300Ω阻值选择说明计算出的300Ω为临界参考阻值实际可选用更大阻值电阻如 1k、4.7k电阻越大 → 回路电流越小 → LED亮度越暗可通过修改限流电阻阻值自由调节LED亮度寄存器版 LED 点灯配置流程以PD7LED2为例全程直接操作寄存器配置。开启 GPIO 端口时钟GD32 所有外设时钟默认关闭配置外设前必须先开启对应总线时钟。// 写法1直接赋值RCU_AHB1EN|0x00000008;// 写法2位操作推荐、可读性高RCU_AHB1EN|(13);配置 GPIO 工作模式分两步配置模式选择 上下拉模式配置为通用输出模式GPIOx_CTL 寄存器// 写法1掩码清零后赋值GPIOD_CTL0xffff3fff;GPIOD_CTL|0x00004000;// 写法2通用位操作通用适配任意引脚GPIOD_CTL~(0x03(2*7));// 清空PD7原有模式GPIOD_CTL|(0x01(2*7));// 设置为输出模式配置为浮空模式GPIOx_PUD 寄存器GPIOD_PUD~(0x03(2*7));// 清空上下拉配置GPIOD_PUD|(0x00(2*7));// 设置浮空模式配置输出类型与速度配置推挽输出GPIOx_OMODEGPIOD_OMODE~(0x017);// PD7 设置为推挽输出配置最大输出速度 50MHzGPIOx_OSPDGPIOD_OSPD~(0x03(2*7));// 清空原有速度配置GPIOD_OSPD|(0x02(2*7));// 设置50MHz输出速度寄存器控制 LED 亮灭两种方式OCTL 端口输出控制寄存器GPIOD_OCTL~(0x017);// PD7 输出低电平点亮LED2GPIOD_OCTL|(0x017);// PD7 输出高电平熄灭LED2BOP 端口位操作寄存器BOP 寄存器高16位清零、低16位置1无需移位取反效率更高GPIOD_BOP|(0x01(716));// 清零PD7低电平点亮LED2GPIOD_BOP|(0x017);// 置位PD7高电平熄灭LED2寄存器点灯核心流程总结开时钟开启对应GPIO端口AHB1总线时钟配模式CTL寄存器设为输出、PUD寄存器设为浮空配属性OMODE设推挽输出、OSPD设输出速度控电平OCTL/BOP寄存器修改引脚高低电平控制LED亮灭库函数版 LED 点灯配置流程一、GPIO 初始化配置流程1. 开启 GPIO 端口时钟开启 GPIOD 端口时钟GD32 外设默认时钟关闭必须先开启时钟。/* enable GPIOD clock */rcu_periph_clock_enable(RCU_GPIOD);2. 配置 GPIO 工作模式GPIO 模式配置分为两步配置为输出功能、配置浮空模式。gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_7);3. 配置 GPIO 输出属性配置推挽输出模式、输出速度为 50MHZ。gpio_mode_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_7);二、库函数点灯操作LED2-PD7点亮 LED2让 PD7 输出高电平三种库函数写法。// 写法1引脚置高gpio_bit_set(GPIOD,GPIO_PIN_7);// 写法2指定引脚电平写入gpio_bit_write(GPIOD,GPIO_PIN_7,1);// 写法3整端口电平写入gpio_port_write(GPIOD,1);