
使用HAL库开发stm32
文章平均质量分 64
记录学习过程
电工小王(全国可飞)
一名刚刚入职的电气攻城狮
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STM32 HAL库 CAN过滤器配置
之前在这篇博文里写了一下配置CAN收发的方法,当时由于并没有使用过滤器的现实需求,所以就也没仔细研究。现在工作中确实需要用到过滤器了,有些项目中控制器和发动机ECU是连接在一路总线的,而发动机ECU会产生大量的报文,这就不得不配置过滤器了。原创 2025-03-11 15:27:28 · 1645 阅读 · 1 评论 -
STM32F407 内部参考电压校准实现 HAL库
实测下来,以上方法校准VDD用处不大,校准前和校准后基本也就差个0.1%~0.3%,VDD在大部分情况下还是比较准的,不如直接校准零点来的直接。厂家出厂的时候给了一个很精确的3.3V电源作为VDD,并记录了在该精准3.3V下,内部那个精确。首先,这个校准机制校准的是系统中电源电压VDD,不校准的情况下我们默认它是3.3V。在3.3V的电源电压下的ADC采样值记录在了flash地址。原创 2025-01-22 15:23:46 · 1009 阅读 · 0 评论 -
STM32 IAP技术 bootloader设计
这样一个简单的bootloader就算设计完了,当然要实现完整的IAP功能的话还需要上位机程序的配合。如果仅仅是需要单纯的IAP,也可以使用一些可以直接发送bin文件的CAN总线调试程序。可以参考一下STM32的IAP技术,基于CAN总线的STM32F103 BootLoader设计_哔哩哔哩_bilibili这位大佬的教程,介绍的非常详细由于工作需要我还要在上位机中设计一些特定的功能,所以我还需要自己来写(╥╯^╰╥)原创 2024-12-27 10:06:52 · 1176 阅读 · 0 评论 -
STM32 RAM在Memory Map中被分为3个区域
可以看到Flash是完整的一块区域,而RAM却被分成了。原创 2024-11-21 16:12:29 · 740 阅读 · 0 评论 -
STM32项目开发Flash空间分配
扇区5~6作为主程序存储区,共256KB,大部分项目应该是够用了的,万一不够就把扇区7也分配给主程序,因为APP备份并不是必要的;其中Bootloader分配扇区0~3,共64KB,用于存储启动引导程序;(可选)如有需要可以把扇区7用于备份程序/恢复出厂设置。扇区4分配64KB用于保存需要断电存储的参数;原创 2024-11-21 13:42:59 · 884 阅读 · 0 评论 -
KEIL优化optimization不同等级的区别
这个模式优化等级比O0高一点,但对debug界面的影响不是很大,体现在:有些代码处没法加断点,但还是按顺序执行的。这个等级对debug界面是最最友好的,体现在:断点打在哪里都可以;任何变量都可以添加到窗口来监测。这个模式下debug界面基本没法用了,程序到处飞,这个模式下debug界面就不太好用了,代码会乱跳。原创 2024-11-12 17:59:04 · 1148 阅读 · 0 评论 -
STM32 输入捕获模式测量频率和占空比 HAL库
该方法测量频率在10Hz-30KHz范围内误差小于0.2%,在1HZ-60KHz范围内误差小于1%。在频率小于100Hz时,理论上测周法的采样周期大于10ms。但通过flag的设置,可以强行在设置的周期内获取采样值,以保持项目中不同传感器数据更新周期的一致。但此时获取的采样值只是上一时刻未更新的数值,并不是真实的。但是但是!其实实际应用时(作为发动机转速传感器)频率输入低于100Hz的情况几乎很难遇到,而且0.2%也是足够的(很多场景下1%都是可以接受的),所以这种方案是完全能够应对的。原创 2024-10-15 20:36:38 · 3362 阅读 · 5 评论 -
STM32 f407 多通道ADC采集+DMA传输 基于HAL库和Cubemx配置
很多教程喜欢从HAL_ADC_Start()和HAL_ADC_Start_IT()开始教,这样虽然能让理论知识理解的更加充分,但我觉得不是很有必要。因为其实HAL_ADC_Start_DMA ()内部的实现中是调用了HAL_ADC_Start_IT()的,用多了遇到问题多了自然就会去看内部实现了,然后自然而然就明白了。至于HAL_ADC_Start()这种阻塞式实现,完全不会用的到。先会用,再精通!原创 2024-09-28 10:40:10 · 6716 阅读 · 12 评论 -
keil中Build Target和Rebuild all Target files的区别
一般来说,刚打开keil的时候Rebuild all Target files一次,后面的操作就全部使用Build Target。注意:编译存在问题的时候建议使用Rebuild all Target files。只编译发生改变的文件。如果某个文件没有被修改过,Keil会跳过它的编译。重新编译所有的源文件,无论文件有没有被修改过。原创 2024-10-31 23:11:22 · 513 阅读 · 0 评论 -
STM32 f407 TIM定时器中断 基于HAL库和Cubemx配置
首先判断句柄htim是否来自所需要的中断,然后执行需要的操作(习惯将外设触发的中断回调函数放在外设对应的.c文件中,这里放在tim.c中)原创 2024-09-27 16:33:36 · 1263 阅读 · 0 评论 -
STM32 输入捕获模式测频率 HAL库
上一篇中介绍了PWM输入模式测量频率和占空比的方法,以及该方法的局限性,提出输入捕获模式在实际应用中的优势。下面记录输入捕获模式测频率的方法,使用F407开发板与cubemx进行配置(选择开发板、开启外部时钟和SW调试接口、Project Manager设置相关操作略过)原创 2024-10-08 15:44:09 · 1163 阅读 · 0 评论 -
STM32 f407 CAN收发 基于HAL库和Cubemx配置
现在主程序中定义大小为8个字节的全局变量,以便我们在主程序中对CAN1和CAN2接收到的报文进行读取不要忘了在main.h中声明,不然can.c文件无法访问变量重定义消息等待回调函数(即邮箱收到信息等待读取时触发的中断)// FIFO0消息等待回调= HAL_OK);// FIFO1消息等待回调= HAL_OK);使用HAL_CAN_RxFifo1MsgPendingCallback()接收数据后对接收到的数据的IDE进行判断,如果是标准ID则使用标准ID将信息发回,扩展ID则同理。原创 2024-09-28 17:15:41 · 3518 阅读 · 0 评论 -
STM32 PWM输入模式测量频率和占空比 HAL库
最核心的原理就是这张图,简而言之就是使用了定时器的两个通道,IC1(通道1)捕获上升沿时记录CCR1的值并复位计数器,两个通道重新开始计数;IC2(通道2)捕获下降沿时记录CCR2的值,根据设置的定时器主频和两个通道的CCR就能计算出PWM的频率和占空比。(图片来自正点原子STM32F407 开发指南)下面使用Cubemx进行配置并使用keil进行编程,使用开发板为STM32F407(选择开发板、开启外部时钟和SW调试接口、Project Manager设置相关操作略过)原创 2024-10-08 11:01:57 · 1372 阅读 · 0 评论 -
stm32 使用keil register窗口评估代码运行时间
然后再main函数中写一段延时函数,debug进行测试,如果和设置的延时一致,那么就可以对其他代码进行耗时评估了。这里以我使用的Jlink为例,enable Trace选项并将core clock设置为与单片机的主频统一。在使用keil进行debug时可以通过register窗口下的sec进行代码运行时间评估。在开发时经常需要知道一段程序或者计算的耗时,以免其耗时太长影响整个程序的进行。在进行debug之前需要到调试器中进行设置。原创 2024-09-30 08:24:43 · 427 阅读 · 0 评论 -
STM32 使用HAL库实现flash读写
记录使用HAL库实现向flash指定地址写入数据并读取数据的方法总体流程可以分为。原创 2024-10-30 09:50:59 · 2227 阅读 · 0 评论 -
STM32 串口不定长数据接收与printf发送重定向
模式选择异步,并开启中断开启发送和接收的DMA传输(接收不定长数据其实只用到了接收的DMA传输,这里既然接收的DMA开了就顺便把发送的DMA也开了哈哈)原创 2024-10-31 15:28:48 · 839 阅读 · 0 评论 -
STM32 f407 多通道PWM输出 基于HAL库和Cubemx配置
下面记录一下使用cubemx的配置过程以及HAL库输出PWM的相关代码(选择开发板、开启外部时钟和SW调试接口、Project Manager设置相关操作略过)原创 2024-09-27 15:47:44 · 1766 阅读 · 0 评论