
STM32
文章平均质量分 84
烹小鲜啊
这个作者很懒,什么都没留下…
展开
-
兆易创新 GD32 系列(三) 标准库初探,点灯LED
那么毫无疑问 rcu_periph_clock_enable(RCU_GPIOC);用来初始化GPIO的时钟。在GD32 系列(二) 中认识到 gd32f4xx_libopt.h的作用,它包含了所有的标准库头文件。点灯是跑程序的第一步,犹如灯塔照亮了前进的路。无论干过多少年,你都是要点灯,MCU的新手村。rcu_periph_clock_enable 是所有外设初始化都需要使用到的部分。一个外设如果要正常工作,首先要启动它对应的输入时钟。点灯要用到的就是GPIO操作 参考标准工程即可。原创 2022-11-26 10:03:44 · 2279 阅读 · 0 评论 -
兆易创新GD32 (二)官方工程 Template 和 创建工程
其中SystemInit 函数是CMSIS规定的接口,在今后的开发中,CMSIS出现频率会越来越高,迟早是要学的。加入 system_gd32f4xx.c 因为这文件是systemInit函数所在的C文件。值得注意的是system_gd32f4xx.c 位于CMSIS目录下。在gd32f4xx_it.c中定义了中断服务函数,和本系列(一)中中断向量表对应。1.建立一个新的工程,器件选择自己对应的MCU型号。定义MCU使用的型号,配置时钟所用参数的设定。在main.c中 引用了5个头文件。原创 2022-11-26 09:37:42 · 3047 阅读 · 0 评论 -
兆易创新 GD32 系列(一) 启动过程分析
要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。WEAK:弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不出错。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便。内存是可读可写的,所以只读指的是FLASH上的空间,原本指的是ROM。同理heap空间的申请也是一样的,__heap_base表示起始地址,__heap_limit表示结束地址。__initial_sp 表示Stack_Mem 空间的结束地址。原创 2022-11-25 23:15:12 · 2622 阅读 · 0 评论 -
STM32 H743(ARM Cortex M7) 启动汇编
1.堆栈的申请Stack_Size EQU 0x800 AREA STACK, NOINIT, READWRITE, ALIGN=3Stack_Mem SPACE Stack_Size__initial_spEQU 类似C语言的defineStack_Size EQU 0x800,表示Stack_Size 为0x800AREA STACK, NOINIT, READWRITE, ALIGN=3用AREA指令定义原创 2022-04-14 22:24:48 · 1652 阅读 · 0 评论 -
RT Thread device(二) PIN 与移植
RT Thread PIN 部署上主要有application 应用层,开发者自己创建的C文件或者模块RTT IO Device 是RTT PIN接口,对于所有的应用程序来说,使用这个相同的接口。RT HAL HAL interface 用于MCU 和RTT特定的 PIN接口之间的解耦最后由MCU 官方HAL库实现PIN 组件的物理操作application 应用程序 产生对PIN 读写操作的需求,其输入参数为RTT PIN INDEX ,特别的命名方式对开发者比较友好。它可以提供RTT PIN原创 2022-03-28 16:47:32 · 3964 阅读 · 0 评论 -
Fault 异常或陷阱 分析
分为两部分:1 参考资料浏览流水2 代码分析a.异常调转上下文分析本文参考文献如下一 . 参考资料浏览讨论内容This application note describes the usage of fault exceptions. It lists the peripheral registers in the System Control Block (SCB) that control fault exceptions or provide information of their原创 2022-03-12 23:46:00 · 3204 阅读 · 0 评论 -
MCU电源域与PowerON
1.VDD主 I/O 和 VDD 域电源输入,为 I/O 和系统模拟模块(如复位、电源管理和时钟)供电的外部电源2.VDDA电源输入 模拟外设的外部模拟电源,为 ADC、 DAC、 OPAMP、比较器和电压参考缓冲器供电的外部模拟电源。该电源独立于所有其它电源。3.VREF+ 和 VREF-电源输入 / 输出 ADC 和 DAC 的外部参考电压ADC 和 DAC 的外部参考电压。– 当电压参考缓冲器使能时, VREF+ 和 VREF- 由内部电压参考缓冲器提供。– 当电压参考缓冲器禁止时,原创 2022-02-28 22:15:13 · 2286 阅读 · 0 评论 -
STM32 HAL库 结构
HAL库是STM32 最新推出的底层库,主要用于cube的自动代码生成,标准库甚至不会再维护,所以按照趋势,HAL是未来的方向。HAL库用于Cube自动化图形界面代码生成工具,但是任然有必要对HAL库有一个文件层次上的清晰认知,比较未来和它打交道的机会非常多。随着MCU主频越来越高,复杂的驱动库会逐渐出现。易用,快速开发的需求会变得更加紧迫。STM32CubeH7GettingStarted.pdf 这是官方对HAL库的说明文档在每个HAL库文件中都有包含,内容非常多各种开发板 BSP 中间件占据了大原创 2022-02-21 14:32:52 · 4199 阅读 · 0 评论 -
RT Thread I/O设备模型与分层
RT Thread 设备模型的思路是继承了Linux驱动的思想。一般 RTOS 用于深度定制的嵌入式系统当中,深度定制就是系统用于特定的环境执行特定的任务。在深度定制的嵌入式系统一般选择功耗较低成本较低的方案。例如ARM M系列架构的MCU,这种环境下RTOS扮演的角色很有限一般是提供有限的服务给应用层,并且引入虚拟化并行特性的线程(任务),把不方便或者不适合在ISR中运行的代码封装成任务。同样提供软件定时器,任务间的同步和数据通信,调度器功能。没有去对底层驱动有过多的要求。RT Thread 的.原创 2022-02-17 16:07:59 · 1070 阅读 · 0 评论 -
STM32 CAN笔记(一)
基本帧结构CAN帧数据详细如上图所示。1.起始位在I2C,SPI,USART通信协议中都有起始位。通信线静默状态(无数据时),总线上的电平状态为静默状态。表示开始就要打破静默状态,总线上的节点知道通信要开始了。启动相应的接收准备。表示帧开始传输2.标识符 ID在I2C协议中 发送起始位后,需要发送目标节点的地址,表示数据的归属。在CAN中没有目标节点地址,ID代表着这条数据的归属。例如 ,ID0x 01 表示温度。那么所有关心温度的节点都可以识别到这条消息。根本上来说CAN的数据传输原创 2022-01-29 15:41:40 · 1691 阅读 · 0 评论 -
STM32 SPI总线深入理解
SPI总线有4条线SS:片选使能信号,低电平有效,选中谁和谁进行通信。SCLK:时钟信号MOSI:Master Out Slave InMISO:Master In Slave Out下图是一对多的链接方式,主机需要用N个片选来选择N个从机下图是菊花链的方式,所有的从机使用一条片选型号。从机的输入输出依次相连SPI协议中的一个难点,时钟的极性和相位SCLK时钟信号极性SCLK空闲时为0那么极性CPOL=0. 那么打破空闲的是高1,出现跳变沿顺序leading edge 前沿 为上升.原创 2022-01-26 21:35:07 · 4778 阅读 · 0 评论 -
STM32 编码器驱动/旋转编码器旋钮encoder
本文已比较纯粹的方式介绍编码器和驱动的编写编码器最少有两个输出信号,一种典型的结构如上图所示。AB是编码器的输出引脚。当触点和黄色的金属片接触的时候信号发生跳变沿,可以上上升沿也可以是下降沿,具体根据AB引脚默认的电平状态,和金属片电平状态。当编码器转过一段角度后就会出现上图的波形。AB信号交替出现脉冲。上图所示的状态。B还在金属片上B是高电平,A已经不再金属片上恢复默认电平低。逆时针转动时,A触点比B触点先接触到金属片。所以A的高电平超前B的高电平。超前多少,根据金属片的长度和AB触点的间距决定。原创 2022-01-25 14:02:19 · 18253 阅读 · 9 评论 -
STM32 高级定时器TIM与PWM时序波形
TIM1 主要有几个部分组成1.时钟输入2.信号输入3.一个16位向上/想下计数器4.输入处理单元(边沿检测,滤波,分频)5.捕获比较6,输出单元整个TIM应该是STM32 整个SOC最复杂的外设了,在各家MCU 的外设中还有博世的GTM IP也很复杂,不对是相当的复杂。时钟配置1.时钟输入来自时钟树总线的时钟CK_INT 内部时钟来自外部输入引脚的ETR来自内部的触发输入ITR->TRC来自外部的TIx引脚输入CNT 计数器的时钟来源还经过PSC分频器。寄存器SM..原创 2022-01-21 10:39:32 · 4267 阅读 · 0 评论 -
STM32 精准采集ADC电压,误差分析
ADC模块采集电压流程STM32 大部分系列都是使用SAR 逐次逼近型电压采集VIN是采集的模拟输入口,VREF表示参考电压。Sa PIN和内部ADC的开关。Sb 接地开关。电压采集阶段电压采集阶段就是内部电容充电的过程。Sb闭合后ADC内部(这里称之为采样保存电路,并不是转换器核心)的电容会进行充电,这个过程需要消耗一定的时间。一但采集完成,相当于复制了一份模拟输入引脚的 电压值。采集阶段完成后这个时候VIN已经不需要了,也就是说这个Pin 上的电压已经采集完毕。等效电路就是VIN对电容2原创 2022-01-08 17:10:09 · 20871 阅读 · 0 评论 -
STM32 深入模拟数字转换器ADC
ADC 是现实世界和数字化世界的的桥梁ADC整体思路ADC模型Analog in put Pin,为输入引脚,需要采集的电平通过输入引脚接入ADC。上图为一个简单的ADC模拟数字转换器模型。模拟量指的是电压量,打开S1,开关那么电流会流过电阻RSH给电容CSH充电。充电完成后电容两端的电压等于输入引脚的电压。这个过程叫做采样周期。目的是对输入引脚电压采样,也叫做采样保持。采样保持是采取目标的电压。下一个时刻,为转换周期,也就是利用采集来的电压进行逐次逼近。最后输出二进制结果。逐次比较会使用原创 2021-12-28 16:28:59 · 4374 阅读 · 0 评论 -
STM32 IIC(I2C)总线协议
IIC总线由一条数据线SDA,一条时钟先SCL组成。多个使用IIC总 线的设备挂载到总线上。I2C 总线是一个多主机的总线 这就是说可以连接多于一个能控制总线的器件到总线 由于主机通常是微控制器主机 初始化发送 产生时钟信号和终止发送的器件,从机被主机寻址的器件连接多于一个微控制器到 I2C 总线的可能性意味着超过一个主机可以同时尝试初始化传输数据 为了避免由此产生混乱 发展出一个仲裁过程 它依靠线与连接所有 I2C 总线接口到 I2C 总线如果两个或多个主机尝试发送信息到总线 在其他主机都产生 .原创 2021-12-25 18:48:55 · 3656 阅读 · 0 评论 -
STM32 深入串口通信UART
STM32串口通信(STM32F103/STM32F407)1.GPIO引脚复用AF机制2.模块Clock时钟树,使能机制。(低功耗)3.UART串口通信机制4.NVIC中断配置机制选择USART RX TX 引脚GPIO 口复用 机制微控制器 I/O 引脚通过一个复用器连接到板载外设/模块,该复用器一次仅允许一个外设的复用功能 (AF) 连接到 I/O 引脚。这可以确保共用同一个 I/O 引脚的外设之间不会发生冲突。进行配置:● 完成复位后,所有 I/O 都会连接到系统的复用功能原创 2021-12-11 21:01:51 · 3266 阅读 · 0 评论 -
Cortex M3 向量中断控制器和外部事件
向量中断控制器向量的意思是有值有方向。向量中断的意思是,发生中断后按照指定的值跳转到中断服务函数执行。中断控制器顾名思义,控制中断向量中断向量表在一张表上记录各种中断和它的中断处理函数跳转地址。有点像一本书的目录,ARM 把目录设计好,发生中断的时候跳转到什么地方执行什么样的处理,由开发者设计。所以在Cortex M3内核设计阶段,这张表就已经确定下来,它有一个默认的位置。按照顺序逐一排序。当中断或者异常发生的时候,硬件就会自动的跳转到对应的地址上,然后取出跳转地址。这部分的初始化动作原创 2021-12-09 20:16:13 · 641 阅读 · 0 评论 -
ARM Cortex m3 / Tricore 关于时钟和时钟树
时钟源OSC晶体振荡器,简称晶振,其作用在于产生原始的时钟频率,这个频率经过频率发生器的倍频或分频后就成了MCU中各种不同的总线频率。晶体振荡器一般高速外部时钟信号HSE(High Speed External Clock signal) 使用OSC晶体振荡器。外部无源晶体与MCU内部时钟驱动电路共同配合形成,有一定的启动时间,精度较高。为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容必须尽可能地靠近振荡器引脚。负载电容值必须根据所选择的晶体来具体调整。RC选频网络构成的振荡电路称原创 2021-12-08 10:05:04 · 2888 阅读 · 0 评论