跟我一起写STM32
文章平均质量分 97
电子宁采臣
3811
展开
-
记录STMH7使用LL库查询方式发送SPI的坑
主要记录了在使用STM32的LL库驱动SPI时遇到的问题以及解决方法。首先在官方Demo中找到了关于LL库的SPI发送部分的启发,并在手册中查找相关信息。作者对EOT和TXP事件进行了了解,并深入研究了SPI的配置方法,包括对CR2寄存器的操作和使能SPI的步骤。在了解了HAL库的SPI传输方式后,仿照HAL库完成了LL库SPI查询方式的编写,简化了分支情况。原创 2024-01-13 16:10:35 · 2059 阅读 · 4 评论 -
STM32H7利用片上DAC加DMA双缓冲实现DDS
这文章探讨了基于STM32H7和LL库的DDS(Direct Digital Synthesizer)的实现。介绍了DDS的原理,聚焦于频率控制和相位控制,呈现了核心代码和程序实现。特别地,文章展示了如何使用Matlab生成波表数组,并在STM32中配置DDS对象。通过串口输出和实际波形效果,解释了DDS主频对精度的影响。原创 2024-01-13 00:51:31 · 1839 阅读 · 0 评论 -
STM32H7解决DMA伪双缓存中的出现Cache问题
本文介绍了在STM32H7中使用DMA进行伪双缓存时可能出现的Cache问题,并提出了解决方案。首先,文章概述了Cache的基本原理,包括时间局部性和空间局部性。接着,详细讨论了STM32H7中的Cache和MPU配置,以及四种Cache策略的应用场景。其次,文章解释了DMA双缓存的原理,强调了采用环形FIFO数据类型来解决ADC数据存放问题的必要性。最后,通过CubeMX配置和核心代码实现的部分,展示了如何在STM32H7中配置Cache和MPU,以及实现环形FIFO和双缓存的核心代码。原创 2024-01-11 21:25:27 · 3362 阅读 · 0 评论 -
ADC和DAC——跟我一起写STM32(第九期)
总所周知,模拟信号是指用连续变化的物理量所表达的信息,如温度、湿度、压力、长度、电流、电压等等,我们通常又把模拟信号称为连续信号,它在一定的时间范围内可以有无限多个不同的取值。由于:软件触发是硬件在一个APB1时钟周期后自动关断的,于是,每次修改输出电压的值后,都要调用软件使能的方法,才能生效。每增加ADC分辨率(分辨率表示ADC能辨别的最小模拟量,用二进制位数表示,比如:8、10、12、16位),都会增加2的次方倍的比较器和电阻。使用的话,可以降低输出阻抗,提高输出负载能力,默认Enable。原创 2023-01-17 19:20:41 · 1451 阅读 · 3 评论 -
“1,2,3,定时器”——跟我一起写STM32(第八期)
这是定时器寄存器的一种特性:影子寄存器。其实也很好理解,如笔者上图的配置,定时器时钟源是72MHZ,则意为72000000次为1s,经过7200的分频,10000次为1s,而周期是5000溢出一次,就是溢出一次的时间为5000/10000=0.5s。不再是计数溢出即产生UEV事件了,而是提前设置好REP寄存器,每次计数溢出就是给REP寄存器减1,直到REP寄存器为0,再产生UVE事件,再中断什么的了。不过,直接操作寄存器是没有HAL库保护的,这可能出现一些底层的驱动错误,这需要注意(怎么这么晚才说!原创 2023-01-15 23:46:02 · 663 阅读 · 1 评论 -
LCD(含FSMC)——跟我一起写STM32(第七期)
TFT-LCD 即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid CrystalDisplay。TFT-LCD 与无源 TN-LCD、STN-LCD 的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFT-LCD 也被叫做真彩液晶显示器。这个就是笔者使用的LCD屏幕三基色原理无法通过其他颜色混合得到的颜色,称之为:基本色通过三基色混原创 2023-01-12 23:13:46 · 673 阅读 · 0 评论 -
OLED(含IIC)——跟我一起写STM32(第六期)
IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。结束信号:原创 2023-01-11 21:39:11 · 1067 阅读 · 0 评论 -
串口(含DMA)——跟我一起写STM32(第五期)
DMA,全称Direct Memory Access,即直接存储器访问。众所周知,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,原创 2023-01-11 19:00:00 · 1163 阅读 · 2 评论 -
启航——跟我一起写STM32(第一期)
笔者出此系列stm32教学仅供和大家一起学习,笔者也是小白,此笔记也算是和大家一起学习。本笔记也参考了大多数资料和文章,笔者只是拾人牙慧的小屁孩。那我们废话多说,现在介绍一下本次学习所使用的工具-----STM32CubeIDE。KeilIARKeil:作为刚入门的新手来说,keil开发32的优势确实很明显,简单说就是配置不繁琐,网上教程较多,比较容易上手,调试功能什么的很不错。如果用标准固件库的开发者,也许就第一次配置需要多花一些时间进行配置,第一个工程文档建好之后,强烈建议保存!原创 2023-01-10 14:32:47 · 885 阅读 · 0 评论 -
点灯——跟我一起写STM32(第二期)
15),就是配置高电平咯。而咱们的 STM32 自身的时钟频率非常的高的(相比而言),对于下面控制的外设,咱们就要“迁就一下”(由该外设的时钟频率决定),所以需要进行一层又一层的分频。可以理解为输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率,就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。上面的函数是对k进行运算,断言机制则判断是k是否是奇数,如果为偶数,则会进入assert,输出报错信息,中止信息,这种机制在调试过程中应该是很有用的!原创 2023-01-10 18:15:58 · 1307 阅读 · 4 评论 -
模范工程——跟我一起写STM32(第三期)
这里就正是利用了我们前面提到的时钟摘取法,ticks 是延时 nus 需要等待的 SysTick 计数次数(也就是延时时间),told 用于记录最近一次的 SysTick->VAL 值,然后 tnow 则是当前的SysTick->VAL 值,通过他们的对比累加,实现 SysTick 计数次数的统计,统计值存放在 tcnt 里面,然后通过对比 tcnt 和 ticks,来判断延时是否到达,从而达到不修改 SysTick 实现 nus 的延时。串口相关知识,笔者将在之后讲解串口的时候给大家详细讲解。原创 2023-01-10 20:55:38 · 239 阅读 · 0 评论 -
按下按键(含EXTI)——跟我一起写STM32(第四期)
外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件中断事件寄存器或值,(在这里也就说可以写入软件中断事件寄存器模拟中断和事件),之后产生信号一分为二,看5挂起屏蔽寄存器和7事件屏蔽寄存器,中断挂起,如果事件没有屏蔽,首先会产生事件,进入脉冲发生器。一个外部中断进去了NVIC之后,它的外部中断挂起标志位就标志它现在正在挂起,等待执行,这个时候我们清除它的标志位,执行回调函数,一次外部中断就完成了。实现程序的并行化,实现嵌入式系统进程之间的切换。原创 2023-01-10 23:06:13 · 587 阅读 · 0 评论