Topic

单片机学习 MCU Learning

A collection of 9 issues

26.3.22 ZD-EP63 [中断] 通过中断来控制LED

1 中断的使用 1.1 中断流程 我们先来看看我们最开始讲中断时的一个中断流程图: 我们是从后往前讲的也就是线讲的NVIC再到EXTI,现在我们在正式配置中断时就要从前往后: 其中外设中断不在我们本章讲解范围,后续使用到时会说。 可以看到事实上和我们的外部中断简图是一致的,也就是先设置GPIO的输入模式,再设置EXTI和IO的映射关系将信号传导到EXTI,再经由EXTI传导到NVIC设置中断分组及优先级,并使能中断,最后在CPU处理中断。 关于为什么要经由这么多寄存器层层传导,刷到一个视频说的是对于一个抽象系统,每一层只用负责处理本层接受到的信号并输出对应信号,尽管这里是硬件的具象系统,我认为道理还是一样的,每个寄存器只负责处理自己收到的信号并输出自己相应的信号就行,省去了单个寄存器的过多配置,提高传导效率。 1.2 中断配置 那么我们就能理清我们最终要配置的东西: 首先因为我们这里配置的EXTI线是连接在GPIO上的,所以我们首先还是使能GPIO的时钟并配置GPIO的输入模式,之后使能AFIO/SYSCFG的时钟并设置EXTI与IO的对应关系,再在EXTI设置屏
17 min read

26.3.15 ZD-EP52 [LED/KEY] 点天灯!!!!

终于开始点灯了,,。。 1 点亮一个LED灯 在点亮一个LED灯之前肯定要创建一个项目工程,具体流程参见26.3.7 ZD-EP27 [Keil新建工程-HAL库版本] 新建HAL库版本工程流程*基于寄存器版本的增删,这里直接给出HAL库工程框架: Project_HALProject_HAL.zip10 MBdownload-circle 在新建完工程框架后,开始进行后续步骤: 1.1 添加板级驱动文件 在工程文件夹的Drivers文件夹下添加一个BSP(Board Support Package)文件夹用于存放相关外设的配置文件,再在BSP文件夹下新建一个LED文件夹。 回到Keil,我们打开工程文件,新建两个文件,分别命名为lcd.c lcd.h,并保存在LED文件夹下,至此我们开始正式配置LED外设。 1.2 配置LED灯 我们首先在.h头文件中做出基本的头文件定义: #ifndef __LED_H #define __LED_H #include "
18 min read

26.3.11 ZD-EP47 [GPIO] GPIO简介及其工作模式

GPIO,Genaral Purpose Input Output,通用输入输出端口,下面我们将从GPIO特点特性和GPIO的工作模式对GPIO展开介绍。 1 GPIO特点特性 关于特点特性这一块我们就直接照搬一下正点原子的介绍吧,这篇文章主要介绍STM32上GPIO的工作模式。 1.1 GPIO的特点 1,不同型号,IO口数量可能不一样,可通过选型手册快速查询; 2,快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz); 3,每个IO口都可以做中断; 4,支持8种工作模式; 1.2 GPIO的电气特性 1,STM32工作电压范围? $$2V≤VDD≤3.6V$$ 2,GPIO识别电压范围? $$COMS端口: -0.3V \le V_{IL} \le 1.164V $$ $$ \hspace{4.5em} 1.
10 min read

26.3.10 ZD-EP39 [系统时钟] F4系列系统时钟初始化函数简介

1 系统时钟初始化函数介绍 正点原子提供的系统时钟初始化函数存放在Drivers/STSTEM/sys.c文件下,具体通过sys_stm32_clock_init()函数实现,该函数下的调用的两个主要函数为HAL_RCC_OscConfig()和HAL_RCC_ClockConfig(),这两个函数的主要作用如下: * HAL_RCC_OscConfig():即振荡器(Oscillator)配置函数,核心作用是启用 / 禁用 STM32 的内部 / 外部振荡器(HSI/HSE/LSI/LSE),配置锁相环(PLL)的倍频 / 分频参数,生成稳定的原始时钟源。 * HAL_RCC_ClockConfig():即系统时钟配置函数,核心作用是将HAL_RCC_OscConfig()配置好的时钟源(如 PLL 输出)选为系统时钟(
8 min read

26.3.8 ZD-EP37 [CubeMX/时钟树] CubeMX新建工程流程及F407时钟树的介绍

1 时钟树简介 我们先简单介绍一下时钟树(基于STM32F407),先看简图(高速部分): 可以看到外部晶振(探索者系列HSE频率为8MHz,F4系列HSI为16MHz)经分频和锁相环的倍频分频后为SYSCLK提供了一个稳定的高速频率,并(经分频后-可选)传递到总线部分,再经一系列分频操作传递给外设。 F1系列HSI默认直接进行二分频,目的是:满足 PLL 硬件输入规格、兼容频率上限、提升时钟稳定性而设计的强制逻辑,是底层硬件与时钟规划的最优解(由豆包生成) AHB分频操作的目的:向下满足不同外设的硬件频率上限,向上匹配系统性能与功耗的平衡,同时兼顾总线协议兼容性和特殊外设(如定时器)的功能需求。(由豆包生成) 内部振荡器为RC振荡器,稳定性较差,使用外部振荡器可以得到更稳定的频率 下面再看低速部分: IWDG(Independent Watchdog)主要用于超时复位,在程序卡死时复位单片机 这里主要看RTC,RTC用于为系统提供精确的时间,因此在有外部振荡器的情况下优先选择外部振荡器(频率更稳定),若实在没有外部振荡器也可以使用内部振荡器替代。 看完简图我们最后
7 min read

26.3.7 ZD-EP27 [Keil/HAL] 新建HAL库版本工程流程*基于寄存器版本的增删

HAL库版本的工程框架和寄存器版本整体大差不差,区别主要是在部分文件夹引入了HAL库相关文件 寄存器版本新建工程流程见下: 26.2.28 ZD-EP22 [Keil新建工程-寄存器版本] 新建寄存器版本工程流程新建工程好复杂,但是养成习惯应该会很好 1 新建工程文件夹 首先在新建的工程文件夹的根目录下创建五个文件夹,分别是Drivers,Middlewares,Output,Projects,User。其用处如下: 文件夹名称 作用 Drivers 存放与硬件相关的驱动层文件 Middlewares 存放正点原子提供的中间层组件文件和第三方中间层文件 Output 存放工程编译输出文件 Projects 存放 MDK 工程文件 User 存放用户编写的代码,如 main.c 接下来进入到Drivers文件夹,再创建三个文件夹,分别是BSP,CMSIS,SYSTEM。其作用如下: 文件夹名称 作用 BSP 存放开发板板级支持包驱动代码,如各种外设驱动 CMSIS 存放 CMSIS
4 min read

26.2.28 ZD-EP22 [Keil/寄存器] 新建寄存器版本工程流程

新建工程好复杂,但是养成习惯应该会很好 1 新建工程文件夹 首先在新建的工程文件夹的根目录下创建五个文件夹,分别是Drivers,Middlewares,Output,Projects,User。其用处如下: 文件夹名称  作用  Drivers  存放与硬件相关的驱动层文件  Middlewares  存放正点原子提供的中间层组件文件和第三方中间层文件  Output  存放工程编译输出文件  Projects  存放 MDK 工程文件  User  存放用户编写的代码,如 main.c 接下来进入到Drivers文件夹,再创建三个文件夹,分别是BSP,CMSIS,SYSTEM。其作用如下: 文件夹名称  作用 BSP 存放开发板板级支持包驱动代码,如各种外设驱动 CMSIS 存放 CMSIS 底层代码,如启动文件(.s 文件)、stm32f4xx.h 等 SYSTEM
15 min read

26.2.11 ADD [结构基础/数电基础] MOS管、与或非门结构解释

因为看不懂单片机芯片结构在讲什么,又跑去看了看计算机组成原理课程,结果和单片机相关的就搞清楚了两个——总线和储存器储存方式(因为看单片机这两个不知所云),反倒是对数电的逻辑门很感兴趣,一直不知道在具体的实现逻辑上是什么样的。 这里先简单过一下总线和储存器的两个存储方式: 总线,即链接各个部件的信息传输线,相当于主干道。信息在总线上传输方式有两种:串行和并行,并行依赖多根数据线实现。总线可以是各个主设备如CPU、I/O设备、储存器间的链接也可以是次一级设备如辅储存器、拓展设备间的链接。各个总线通过桥进行连接,由此可以得到最复杂的多层PCI总线结构。此外总线被一个设备占用后,其他设备都不能再占用,因此要通过总线控制结构来完成多设备间的信息传递,主要依靠时钟周期实现,具体内容日后再学。 储存器的两个储存方式:即大端/大尾和小端/小尾,指的是数据在地址空间的排序方式,大尾方式即越靠后的数据分配的越大的数据地址上,小尾则反之。一般情况下一个地址空间储存一个字节数据,即256bit,对应的可以储存两位16进制数字,在读取数据时根据不同的存储方式来读取数据,不同存储方式的芯片间不能直接通信。
7 min read

26.2.6 ZD-EP9 [Keil环境配置/sfr文件问题] 对Keil集成开发环境的初步认识

首先总结一点,Keil对新手太不友好了。 很多配置环境过程中遇到的问题要去网上不断找教程,过程十分痛苦。 还很容易崩溃。。 配置大致流程 下面还是来回顾一下上手一个单片机(我还记得)的大致流程吧: · 查阅官方芯片数据手册 · 在Keil中安装芯片对应的器械支持包* · 在项目中配置好开发环境(如仿真器配置、优化程度选择) · 进行项目开发 这其中最烦的就是开发环境的配置了。 简记一下仿真器配置: · 首先在Debug界面右侧(硬件调试方法,左侧为软件调试方法)选择对应的仿真器(或称下载器,目前使用的是更专用的ST-Link下载器,后续可能会用到更通用的DAP仿真器),并勾选下方Run to main()选项 · 进入setting界面,默认无需进行更多修改 · 值得注意的是,在仿真器的Trace(时间调试相关设置)界面需要将Core Clock(芯片频率)设置成对应芯片的最大频率(根据需要适时调整,最大频率F1系列72MHz,F4系列168MHz),可在Keil界面的File - Devices Datebase界面中查询 · 在闪存下载界面要讲Re
4 min read

欢迎订阅 Subscribe to 沿江路右转Turn Right at Yanjiang Rd.

期待您的精彩评论 Looking forward to your wonderful comments.
[email protected]
订阅 Subscribe
赣ICP备2026002696号