你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【春节福利】每日一 “芯” 意,ST 论坛邀你 “马上” 翻好礼!  

[复制链接]
STMCU-管管 发布时间:2026-2-10 08:56
阅读主题, 点击返回1楼
收藏 1 评论355 发布时间:2026-2-10 08:56
355个回答
A峰A 回答时间:2026-2-14 22:17:43

Day 5 (2.14) 翻出【撒狗粮牌】:这块表是12年左右第一次去香港时给老婆买的,当时花了3000+

微信图片_20260214221537_385_357.jpg

meiyao 回答时间:2026-2-14 22:44:21

Day 5 (2.14) 翻出【撒狗粮牌】:技术人的浪漫。 o        示例:秀一下给对象写的单片机爱心流水灯,或者收到的最硬核的礼物。

image.png

615830c463c229a05fdaf64a1d846476.jpg

zwjiang 回答时间:2026-2-14 22:57:26

【撒狗粮牌】:单片机爱心流水灯程序

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实现更复杂效果 } }

flyingstar 回答时间:2026-2-14 23:12:04
2.14情人节。再多礼物也不如这个转账实在。


微信图片_20260214232659_128_725.jpg

无极考拉 回答时间:2026-2-14 23:13:49

Day 5 (2.14) 翻出【撒狗粮牌】:技术人的浪漫。

我老婆送我一个电烙铁

CM_STM32 回答时间:2026-2-15 00:28:45

【干货牌】STMCubeIDE中需要按Ctrl + Space才能自动补全代码,可以加快效率

A0dy 回答时间:2026-2-15 00:30:39

【干货牌】: 在使用STMCubeIDE开发时候,一般都会打开多个.c / .h标签页,每次都用鼠标去点的话就会很浪费时间,而且也低效;

因此我会使用 Alt + ←/→:前一个 / 后一个页面; 这个快捷键方式!!!

这个快捷键可以在不同的页面之间快速切换,在查看多个文件代码时非常有用!

北方 回答时间:2026-2-15 05:23:35

【干货牌】

分享一下小技巧。新款的st系列芯片都可以不用stlink下载程序。

这里用到bootloader功能,先查pin定义找到boot0引脚,接地同时加电,就可以在usb口显示为usb bootloader接口。这样可以用cube programmer这样的工具直接下载bin可执行文件。

省一个stlink 不香吗

wenyangzeng 回答时间:2026-2-15 08:04:06
Day 6 (2.15)【干货牌】

《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,其中有:

  1. #define PAGE_SIZE             ((uint32_t)0x0400)
  2. #define EEPROM_START_ADDRESS ((uint32_t)0x08002000)
复制代码




这里定义:
  1. #defineEEPROM_START_ADDRESS ((uint32_t)0x08002000)
复制代码
再查阅STM32F0xx的 eeprom.c:
  1. uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)
  2. {  uint16_t ValidPage = PAGE0;
  3. uint16_t AddressValue = 0x7777, ReadStatus = 1;
  4. uint32_t Address = 0x08001000, PageStartAddress = 0x08001000;
  5. }
复制代码




这里地址的分配是这样安排的:
uint32_t Address= 0x08001000, PageStartAddress = 0x08001000;
这个EEPROM emulation in STM32F0xx是从EEPROM emulation in STM32F10xx移植过来的。于是查阅F1系列相关的文件,
STM32F10xx 的eeprom.h是这样的:
  1. #define EEPROM_START_ADDRESS    ((uint32_t)0x08010000)
复制代码





STM32F10xx的 eeprom.c是这样的:
  1. uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)
  2. {  uint16_t ValidPage = PAGE0;
  3. uint16_t AddressValue = 0x5555, ReadStatus = 1;
  4. uint32_t Address =0x08010000, PageStartAddress =0x08010000;
  5. }
复制代码


ST工程师在移植F1仿真EEPROM到F0仿真EEPROM时,忘记把F0的eeprom.h和eeprom.c文件里关于仿真Flash页的地址修改一致:
在F051写入的首地址是0x08002000,而读出的首地址则在0x08001000。从而导致读数据的地址不是写入数据的地址——读出错。
修改eeprom.c代码:
  1. uint32_t Address= 0x08002000, PageStartAddress = 0x08002000;
复制代码




故障排除。
那为何在用nucleo进行评估验证时却读写正常呢?下载有BUG的原代码进行跟踪调试可知:由于读地址与写地址不符,进入读函数后当判断地址不符,就执行return了。根本就没有读数据。而恰好在演示代码中写完Flash后数组变量没有清空,在读出错return后,数组变量里保留着写操作留下的残余,让你误以为读写正常。
背影101 回答时间:2026-2-15 08:09:52
翻出【干货牌】:分享一个 ST 实用小技巧。
来分享分享,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  启动调试
行色匆匆 回答时间:2026-2-15 08:53:58

Day 6 (2.15) 翻出【干货牌】:

善用STM32CubeMX生成初始化代码,再结合HAL库进行功能开发,既能大幅提升效率,又能避免手动配置时钟树和引脚时的低级错误‌。

A峰A 回答时间:2026-2-15 11:02:32

Day 6 (2.15) 翻出【干货牌】:

image.png

linghz 回答时间:2026-2-15 11:10:08

Day 6 (2.15) 翻出【干货牌】:

STMCubeIDE里有个超好用的快捷键 Ctrl+Alt+H,能直接跳转到光标所在函数的定义处。 比如你看到别人调用了HALUARTTransmit(),但不确定参数怎么填,按一下就能秒查源码。

lxl666 回答时间:2026-2-15 11:10:11

Day 6 (2.15) 翻出【干货牌】:

HAL库有几个隐藏的“宝藏”功能,比如它的回调机制,可以让你用事件驱动的方式编程,比传统轮询高效多了。还有低功耗优化,比如HALPWREnterSTOPMode(),配合CubeMX能轻松实现微安级待机。另外,外设复用功能也很强,比如一个GPIO可以同时用作UART和定时器,通过CubeMX配置就行,代码自动生成。

lospring 回答时间:2026-2-15 11:24:51

场景:读代码时看到一个函数 HAL_GPIO_WritePin,想看看它到底是怎么实现的,或者想知道 LED_PIN 这个宏定义的值是多少。

操作: 按住 Ctrl 键,然后用鼠标单击那个函数名或变量名。

结果: IDE 会自动跳转到该函数或变量的定义位置(比如 .c 或 .h 文件里)

所属标签

ST中文论坛活动

即日起开启活动话题入口,之后的活动统一都放在此处,欢迎大家的加入!


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版