【板卡评测】STEVAL-STWINKT1B用于工业IoT应用的无线工业节点开发套件
学习有奖 | 《STM32CubeIDE For VS Code》系列课程上线,VS Code 的灵活运用助你开发!
《STM32CubeIDE For VS Code线上课程》学习笔记+直接调用STM32CubeMX,生成CMake工程
《STM32CubeIDE For VS Code线上课程》学习笔记+软件安装
《STM32CubeIDE For VS Code线上课程》学习笔记+建立工程
文末福利 | 战略破局,载誉前行!意法半导体2025年度盘点
论坛年终活动,收货还图
中奖名单公布 | 12月重点活动中奖名单出炉!
新年新计划
【宠粉福利】2025 ST中文论坛年终粉丝狂欢节
微信公众号
手机版
【撒狗粮牌】:单片机爱心流水灯程序
include <reg52.h>
include <intrins.h> // 包含循环左移函数crol
define uint unsigned int
define uchar unsigned char
void delay(uint ms) { // 延时函数,晶振12MHz时约1ms uint i, j; for(i=0; i<ms; i++) for(j=0; j<120; j++); }
void main() { uchar i; while(1) { // 先让P1口LED依次点亮 P1 = 0x01; // 第一个LED亮 for(i=0; i<8; i++) { delay(200); P1 = crol(P1, 1); // 左移一位,点亮下一个 } // 再让P2口LED依次点亮 P2 = 0x01; for(i=0; i<8; i++) { delay(200); P2 = crol(P2, 1); } // 也可同时控制P1和P2实现更复杂效果 } }
Day 5 (2.14) 翻出【撒狗粮牌】:技术人的浪漫。
我老婆送我一个电烙铁
【干货牌】STMCubeIDE中需要按
Ctrl + Space才能自动补全代码,可以加快效率【干货牌】: 在使用STMCubeIDE开发时候,一般都会打开多个.c / .h标签页,每次都用鼠标去点的话就会很浪费时间,而且也低效;
因此我会使用 Alt + ←/→:前一个 / 后一个页面; 这个快捷键方式!!!
这个快捷键可以在不同的页面之间快速切换,在查看多个文件代码时非常有用!
【干货牌】
分享一下小技巧。新款的st系列芯片都可以不用stlink下载程序。
这里用到bootloader功能,先查pin定义找到boot0引脚,接地同时加电,就可以在usb口显示为usb bootloader接口。这样可以用cube programmer这样的工具直接下载bin可执行文件。
省一个stlink 不香吗
《EEPROM emulation in STM32F0xx microcontrolles》一个BUG的修正
STM32中文官网有一篇《EEPROM emulation in STM32F0xx microcontrolles》应用笔记。它为每一个要保存的数据预先设置一个16位虚拟地址,紧跟一个16位变量数据。当写入一个新数据时,只需重新写一次该数据的虚拟地址,接着写入新的数据即可。旧的数据作废,直到本页写满。读数据时搜索最后一次写入的地址,就能读出最新的数据。无需整页Flash都删除再写入,大大提高了Flash的读写寿命。
有一个“STSW_STM32117_STM32F0xx微控制器中的EEPROM仿真”固件包可供评估。
这个固件包演示了在仿真EEPROM的页里对VarData[0]、VarData[1]、VarData[2]写入数据,然后读出。
在NUCLEO开发板上运行演示代码进行评估验证,仿真EEPROM的数据写入读出都正确,放心移植到目标板了。
不料,目标板调试过程中发现,只要断电,再上电后读出的数据就不是断电前写入的数据了。排除硬件故障的可能性后,接下来是判断是写出错还是读出错。这片STM32F051C6T6的Flash长度为32KB,我照抄演示文件中的代码,将第8和第9扇区设置用来仿真EEPROM,它的每页长为0x400,地址从0x08002000到0x080027FF。使用STM32 ST-LINK Utility工具读该扇区,Flash已经正确写入。判断故障在读操作。
先查阅STM32F0xx的eeprom.h,其中有:
这里定义:
这里地址的分配是这样安排的:
uint32_t Address= 0x08001000, PageStartAddress = 0x08001000;
这个EEPROM emulation in STM32F0xx是从EEPROM emulation in STM32F10xx移植过来的。于是查阅F1系列相关的文件,
STM32F10xx 的eeprom.h是这样的:
STM32F10xx的 eeprom.c是这样的:
ST工程师在移植F1仿真EEPROM到F0仿真EEPROM时,忘记把F0的eeprom.h和eeprom.c文件里关于仿真Flash页的地址修改一致:
在F051写入的首地址是0x08002000,而读出的首地址则在0x08001000。从而导致读数据的地址不是写入数据的地址——读出错。
修改eeprom.c代码:
故障排除。
那为何在用nucleo进行评估验证时却读写正常呢?下载有BUG的原代码进行跟踪调试可知:由于读地址与写地址不符,进入读函数后当判断地址不符,就执行return了。根本就没有读数据。而恰好在演示代码中写完Flash后数组变量没有清空,在读出错return后,数组变量里保留着写操作留下的残余,让你误以为读写正常。
来分享分享,STMCubeIDE 的快捷键,在你鼠标突然失灵或者没电时候,还是很有用的哦
Ctrl + S 保存
Ctrl + C 复制
Ctrl + V 粘贴
Ctrl + X 剪切
Ctrl + 7 快速注释行
Alt + / 补全代码
Shift + Tab 代码对齐
Ctrl + D 删除整行
Ctrl + “-” 缩小字体
Ctrl + Shift + “+” 放大字体
Ctrl + 鼠标左键 跳转到定义处
Ctrl + L 跳转至某行
Shift + Enter 在下一行新增空行
Ctrl + Tab 源文件/头文件切换
Ctrl + E 快速选择已打开文件
Ctrl + Q 跳回最新编辑点
Ctrl + 鼠标滚轮 快速滑动
Ctrl + F 文件内内搜索
Ctrl +↑/↓ 快速滑动
Ctrl + H 项目内搜索
Ctrl + M 最大化/默认当前窗口
Ctrl + O 显示大纲(方便跳转)
Ctrl + W 关闭当前窗口
Ctrl + B 编译工程
Ctrl + F2 终止运行
Ctrl + Z 向后撤回
Ctrl + Y 向前撤回
F2 展开详细信息
F3 跳转到声明处
F5 跳进函数(调试时)
F6 单步运行(调试时)
F7 跳出函数(调试时)
F8 全速运行(调试时)
F11 启动调试
Day 6 (2.15) 翻出【干货牌】:
善用STM32CubeMX生成初始化代码,再结合HAL库进行功能开发,既能大幅提升效率,又能避免手动配置时钟树和引脚时的低级错误。
Day 6 (2.15) 翻出【干货牌】:
Day 6 (2.15) 翻出【干货牌】:
STMCubeIDE里有个超好用的快捷键 Ctrl+Alt+H,能直接跳转到光标所在函数的定义处。 比如你看到别人调用了HALUARTTransmit(),但不确定参数怎么填,按一下就能秒查源码。
Day 6 (2.15) 翻出【干货牌】:
HAL库有几个隐藏的“宝藏”功能,比如它的回调机制,可以让你用事件驱动的方式编程,比传统轮询高效多了。还有低功耗优化,比如HALPWREnterSTOPMode(),配合CubeMX能轻松实现微安级待机。另外,外设复用功能也很强,比如一个GPIO可以同时用作UART和定时器,通过CubeMX配置就行,代码自动生成。
场景:读代码时看到一个函数 HAL_GPIO_WritePin,想看看它到底是怎么实现的,或者想知道 LED_PIN 这个宏定义的值是多少。
操作: 按住 Ctrl 键,然后用鼠标单击那个函数名或变量名。
结果: IDE 会自动跳转到该函数或变量的定义位置(比如 .c 或 .h 文件里)
Day 6 (2.15) 翻出【干货牌】:分享一个 ST 实用小技巧。
最常用的缩进快捷键是 Tab(缩进)和 Shift+Tab(减少缩进)
Day 6 (2.15) 翻出【干货牌】
CV工程师 ctrl +C/V/Z/Y 复制-粘贴-撤回-恢复撤回
特别是Z和Y 写代码加功能的时候容易出现写到后面发现直接回退版本的话 写的功能都没有了 那就可以选择性回退部分了👀️