搜索
bottom↓
回复: 43

试用STM32G031时发现的一些坑

  [复制链接]

出0入16汤圆

发表于 2020-9-23 01:11:57 | 显示全部楼层 |阅读模式
近段时间在一个新项目里试着把STM32F030的方案转成STM32G031,可能年纪大了,花了不少时间精力把HAL库的原有项目代码转成用LL库的。
。调试过程中发现其中一些坑挺折腾人的。
1,芯片出厂设置好像默认从system flash启动,新的芯片需要修改option bytes才能从用户代码启动,而boot 0 脚与调试口共用,在调试时很容易一开始跑到system flash 的BootLoader里面去了。
不完美解决方案:Boot 0脚接1个100K电阻下拉,并修改option byte 将启动位置改为由Boot 0脚控制。

2,除了重新上电,基本少所有reset动作都不能改变启动位置。如果你焊了电池再烧录空片子,就需要烧录完把电池焊下来断电重新上电才行。如果哪个大神做的烧录器能在烧录完改了Option bytes修改后顺便把FLASH_OPTR寄存器也改了从用户区启动,也许这个问题就解决了。

3,擦除后的FLASH第一次烧写可以把0xFF内容改写,如果把0xFF再写一遍0xFF就不能再改写成其它数据了。这是我折腾了很久才发现的,已经得到源头确认。 刚开始我是发现代码中在FLASH里预留的FF占位空数据不能再通过用IAP的方式修改,后把写入位置改到其它位置才发现了这个问题。以前在STM32F0、SN8F、HT32F5、76E003等不同厂家的芯片都可以将FLASH中一段0xFF数据改写成功的,所以没想到STM32G0这么强悍的FLASH数据保护有这个问题。
不完美解决方案:写Flash时如果数据是64位的0xFFFFFFFF FFFFFFFF就跳过不执行写入。执行FLASH写入前最好执行下面两个语句来清除错误标记,不然还是有相当的概率写不成功。
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ECCC | FLASH_FLAG_ECCD);
__HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_SR_CLEAR);

4,早前芯片规格书里Option bytes及FLASH_OPTR寄存器里定义的掉电电压设置和上电电压设置对调了,今年新版本规格书已经修改过来。但V1.2.0的PACK库文件里,还没有更改过来。电脑C盘用户文件夹下AppData\Local\Arm\Pack(这里有个s的,但加了s发不出来了)\Keil\STM32G0xx_DFP\1.2.0\Drivers\CMSIS\Device\ST\STM32G0xx\Include下面的几个STM32G0*1.h文件中的FLASH_OPTR_BORF_LEV_Pos 还是按旧版本的规格书写的。

5,疑似自定义bootloader切换VECT后跳到主程序后只能进入第一个调试断点,其它调试断点貌似无效。如果不用BootLoader好像就没有这个问题。不知其他人有没有遇到这个问题。

6,还没有找到合适的脱机烧录器进行量产。可能由于STM32G0x1的option bytes 太过牛叉,一不小心就把芯片锁死弄成砖了,所以做烧录器的貌似都比较火大。南方一家较出名的公司的单个按键的烧录器不接芯片reset脚可以烧录芯片,接了reset脚就不能烧录了,他们认为他们的烧录器没问题是我的板子的问题,要我用不了就申请退货好了。北方那家带屏的烧录器我只是跟他们客服说了上面第四点关于BOR的问题,他们直接就说他们只写RDP字节其它不管,一句“我上面把话撂这里了”让我挺惊讶的

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2020-9-23 06:35:43 来自手机 | 显示全部楼层
关注,新东西总是有坑的

出0入442汤圆

发表于 2020-9-23 06:50:16 来自手机 | 显示全部楼层
我用过stm32l051不识别stlink,最后用串口下载的。。

出0入79汤圆

发表于 2020-9-23 07:51:16 来自手机 | 显示全部楼层
改回用dspic后,外设初始化简单好多,精神也好了很多。再也不担心什么固件库,什么cubemax了,心烦。

出0入4汤圆

发表于 2020-9-23 08:36:49 | 显示全部楼层
当年做脱机烧录器给L011量产的时候,也是脱机各种毛病,没办法亲自用示波器抓出波形来给卖家。

出0入4汤圆

发表于 2020-9-23 10:21:22 | 显示全部楼层
本帖最后由 minisystem 于 2020-9-23 10:24 编辑
wye11083 发表于 2020-9-23 06:50
我用过stm32l051不识别stlink,最后用串口下载的。。


我也在用这款,没有问题啊?

是不是开低功耗把SWD GPIO给关掉了?

出1310入193汤圆

发表于 2020-9-23 10:25:04 | 显示全部楼层
每一次的更换芯片型号 都是消耗生命最高效的时刻  电工 杯孤

出0入0汤圆

发表于 2020-9-23 11:42:02 | 显示全部楼层
minisystem 发表于 2020-9-23 10:21
我也在用这款,没有问题啊?

是不是开低功耗把SWD GPIO给关掉了?

应该是使用进了低功耗,而SWD接口又没接RESET这个脚,只有SWD/SWCLK。

出0入442汤圆

发表于 2020-9-23 12:06:18 来自手机 | 显示全部楼层
minisystem 发表于 2020-9-23 10:21
我也在用这款,没有问题啊?

是不是开低功耗把SWD GPIO给关掉了?

空片子就死活不认。山寨的stlink。

出0入0汤圆

发表于 2020-9-23 13:33:57 来自手机 | 显示全部楼层
AD速度提高不少,不知道精度或有效位数比起030差多少?

出0入0汤圆

发表于 2020-9-23 17:05:41 | 显示全部楼层
我最近也用了STM32G031, 一批货第一遍烧录全没问题。程序运行后会设置RDP_LEVEL_1. 之后再烧第二遍时有大概15%的板再也connect不上。烧录器用的Jink v9. 烧录口是SWD, 有复位脚。目前还没知道问题出在哪。

出0入16汤圆

 楼主| 发表于 2020-9-24 10:25:52 | 显示全部楼层
wanglei1984 发表于 2020-9-23 17:05
我最近也用了STM32G031, 一批货第一遍烧录全没问题。程序运行后会设置RDP_LEVEL_1. 之后再烧第二遍时有大 ...

规格书上说了设置到RDP_LEVEL_1的话调试接口就不能读写flash了,可以试下用STM32 CUBE RPOGRAMMER通过ST link  修改option bytes 重新上电修改回来。

出0入16汤圆

 楼主| 发表于 2020-9-24 10:28:20 | 显示全部楼层
wajlh 发表于 2020-9-23 08:36
当年做脱机烧录器给L011量产的时候,也是脱机各种毛病,没办法亲自用示波器抓出波形来给卖家。 ...

我用逻辑分析仪抓了数据给烧录器的客服,他直接叫我用不了就退货好了

出0入0汤圆

发表于 2020-9-24 19:35:29 | 显示全部楼层
3,擦除后的FLASH第一次烧写可以把0xFF内容改写,如果把0xFF再写一遍0xFF就不能再改写成其它数据了。


我也被这个坑过。应该是ecc的问题,全新时ecc也是0xff,重新写入0xff后ecc就改变了。

出0入14汤圆

发表于 2020-9-25 01:13:10 | 显示全部楼层
G相对F来说有什么优势?

芯片外设多?
功能更强悍?
价格更美丽?

出105入79汤圆

发表于 2020-9-25 02:26:45 | 显示全部楼层
还是用大众芯片好, 不折腾

出0入16汤圆

 楼主| 发表于 2020-9-25 10:49:16 | 显示全部楼层
isakura 发表于 2020-9-25 01:13
G相对F来说有什么优势?

芯片外设多?

现在F系列产能被某大厂吃掉了,价格飞涨还不说,交期很长很长

出0入50汤圆

发表于 2020-9-26 13:47:42 | 显示全部楼层
找到一个STM32G070KBT6,带4个串口,总算找到适合我用的多串口(不少于3)大引脚间距的STM ARM芯片了

出0入0汤圆

发表于 2020-9-30 17:50:31 | 显示全部楼层
今天调试iap,进入擦除flash就复位,

出0入0汤圆

发表于 2020-10-4 07:30:48 | 显示全部楼层
G系列,会大热

出0入162汤圆

发表于 2020-10-4 12:26:21 来自手机 | 显示全部楼层
F系列已经被国内广泛克隆仿制了,st用升级版G来稳定市场。
和 F030一样的价格,起步就是128Kflash 36kram,轻松上操作系统。

出0入85汤圆

发表于 2020-10-4 13:01:55 来自手机 | 显示全部楼层
isakura 发表于 2020-9-25 01:13
G相对F来说有什么优势?

芯片外设多?

用了更新的工艺,同样面积的晶圆可以切出更多芯片,因此成本更低。
功能和性能确实比F系列有提升,比如G0的串口带FIFO了,主频也提高到64M了(F0是48M)

出0入0汤圆

发表于 2020-10-4 13:31:27 来自手机 | 显示全部楼层
boot跟调试口共用引脚?st这是大改引脚规划了?

出0入0汤圆

发表于 2020-10-4 15:26:17 | 显示全部楼层
不知道能不能兼容到5V   

出0入0汤圆

发表于 2020-10-4 22:15:53 来自手机 | 显示全部楼层
楼主第三条是什么坑?

出0入162汤圆

发表于 2020-10-5 07:25:50 来自手机 | 显示全部楼层
lnso 发表于 2020-10-4 22:15
楼主第三条是什么坑?

FLASH中FF的区域,如果被写过了FF就不能再次编程了,

出0入0汤圆

发表于 2020-10-13 23:24:03 来自手机 | 显示全部楼层
AWEN2000 发表于 2020-10-5 07:25
FLASH中FF的区域,如果被写过了FF就不能再次编程了,

我测试是可以的,

出0入0汤圆

发表于 2020-10-13 23:28:33 来自手机 | 显示全部楼层
本帖最后由 lnso 于 2020-10-13 23:37 编辑
Elex 发表于 2020-9-24 10:25
规格书上说了设置到RDP_LEVEL_1的话调试接口就不能读写flash了,可以试下用STM32 CUBE RPOGRAMMER通过ST  ...


楼主,能否发一个完整的写flash函数,我在做stm32G070的iap升级,flash老是写不进去

出0入16汤圆

 楼主| 发表于 2020-10-15 22:42:23 | 显示全部楼层
lnso 发表于 2020-10-13 23:24
我测试是可以的,

厂家的人已经确认过,不行的

出0入16汤圆

 楼主| 发表于 2020-10-15 22:47:47 | 显示全部楼层
lnso 发表于 2020-10-13 23:28
楼主,能否发一个完整的写flash函数,我在做stm32G070的iap升级,flash老是写不进去 ...

哈,你上面又说可以写。
注意不要设置option byte 里面的保护,设了就写不了啦。买过两种脱机烧录器的,做烧录器的人好像对这个option byte 都有些不爽

出0入0汤圆

发表于 2020-10-15 22:57:32 | 显示全部楼层
Elex 发表于 2020-10-15 22:47
哈,你上面又说可以写。
注意不要设置option byte 里面的保护,设了就写不了啦。买过两种脱机烧录器的, ...

我的意思是说我擦除后确实是0xff,然后写2048字节也是可以写进去,但是一包一包过来的时候就写不进去了

出0入0汤圆

发表于 2020-10-15 23:01:09 | 显示全部楼层
Elex 发表于 2020-10-15 22:47
哈,你上面又说可以写。
注意不要设置option byte 里面的保护,设了就写不了啦。买过两种脱机烧录器的, ...

擦除后的区域全是ff,然后我写2048字节0进去,是可以的。我不知道和你说的是不是同一种,我明天截图出来

出0入16汤圆

 楼主| 发表于 2020-10-15 23:10:36 | 显示全部楼层
lnso 发表于 2020-10-15 23:01
擦除后的区域全是ff,然后我写2048字节0进去,是可以的。我不知道和你说的是不是同一种,我明天截图出来 ...

擦除后第一次写啥数据都可以吧,问题是擦除后写一些0xFF进去,然后这些写过0xFF的位置就不能再写入其它数据了。试过很多其它芯片都没有这个问题,估计是因为G0自带的flash校验功能引起的。
你的问题可能是串口中断造成的,写的时候要记得关中断。

出10入95汤圆

发表于 2021-2-8 21:17:14 | 显示全部楼层
g系列的,是不是防破解会好一点?

出100入101汤圆

发表于 2021-2-9 07:21:18 来自手机 | 显示全部楼层
不错,学习。坑解了么?

出0入4汤圆

发表于 2021-2-9 09:23:01 | 显示全部楼层
wye11083 发表于 2020-9-23 12:06
空片子就死活不认。山寨的stlink。

我的也是山寨的STLINK

出0入0汤圆

发表于 2021-11-6 00:10:24 | 显示全部楼层
Elex 发表于 2020-10-15 23:10
擦除后第一次写啥数据都可以吧,问题是擦除后写一些0xFF进去,然后这些写过0xFF的位置就不能再写入其它数 ...

刚准备用STM32G030做,现在刚跑了IO和UART,准备弄IAP,如果是这个问题,那就是说只能烧录一次程序了啊,楼主现在这个问题厂家有解决了吗?

出0入14汤圆

发表于 2021-11-6 01:38:57 | 显示全部楼层
SXXDL 发表于 2021-11-6 00:10
刚准备用STM32G030做,现在刚跑了IO和UART,准备弄IAP,如果是这个问题,那就是说只能烧录一次程序了啊, ...

我觉得你理解差了。。。。

我开始也是这样想,后来反应过来厂家还不至于这么水

楼主的意思是,擦除后,写0xFF,OK,再写 FF 就出问题

====

理解起来就是  楼主 认为 只要是 FF ,写多少次都是认为里面没数据,可以随便写

实际上,芯片 认为0xFF也是有效数据,只能写一次

其实 只要 注意 每次写数据的时候擦除重新写就没问题....

===

不知道理解的对不对,但是我也没用过这个芯片 ,全靠猜测

我们用国产完全够了

出0入0汤圆

发表于 2021-11-6 11:55:00 | 显示全部楼层
本帖最后由 SXXDL 于 2021-11-6 11:57 编辑

不知道是ST修改了还是楼主看错了?我看的手册芯片启动是默认从8000**地址开始的啊






按照ST出厂默认数据0xFFFF FEAA,启动选项24和26都是1,这个应该没问题吧?
楼主的IAP不知道弄得怎样了?交流一下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入16汤圆

 楼主| 发表于 2021-11-6 14:55:47 | 显示全部楼层
SXXDL 发表于 2021-11-6 11:55
不知道是ST修改了还是楼主看错了?我看的手册芯片启动是默认从8000**地址开始的啊

第一次上电,没有烧录程序的空芯片是从自动的BootLoader里启动的。启动位置不断电的话各种复位都不能修改。
你看我发的全部内容,能解决的基本上都解决了

出0入0汤圆

发表于 2021-11-6 15:09:13 | 显示全部楼层
Elex 发表于 2021-11-6 14:55
第一次上电,没有烧录程序的空芯片是从自动的BootLoader里启动的。启动位置不断电的话各种复位都不能修改 ...

system flash里存放的是自带的IAP,你怎么知道上电后是从这里启动的啊?这个IAP难道还能仿真?
另外我上面的手册写的很明白上电是从main flash里启动的,我不明白你是怎么验证它的启动顺序的?

出0入16汤圆

 楼主| 发表于 2021-11-6 15:15:51 | 显示全部楼层
SXXDL 发表于 2021-11-6 15:09
system flash里存放的是自带的IAP,你怎么知道上电后是从这里启动的啊?这个IAP难道还能仿真?
另外我上 ...

调试的时候有指针位置可以看到地址,连串口可以按BootLoader协议连接

出0入0汤圆

发表于 2021-11-8 11:23:25 | 显示全部楼层
Elex 发表于 2021-11-6 15:15
调试的时候有指针位置可以看到地址,连串口可以按BootLoader协议连接


我调试的时候它一直在0800*地址里转悠啊,如果上电是在系统存储区启动,按照手册应该是在1FFF*地址开始的,不知道你是怎么调试看到的啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出30入16汤圆

发表于 2022-4-18 18:16:22 来自手机 | 显示全部楼层
这几天玩了一下stm32g030f6,用keil加jlink,swd接口,感觉很好用,特别是用cubemx生成初始化代码。这只是调试使用,然后使用量产型的伟福jmaster 3,下载加密啥的都挺好的。

就是有一个问题,用stm32cubeprogrammer软件加stlink使用串口模式始终不能读取选项字节,但用swd模式就可以顺利读取。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 05:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表