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

查看: 768|回复: 1

【我与STM32共成长】一路上有你

[复制链接]

2

主题

2

回帖

0

蝴蝶豆

初级会员

最后登录
2017-6-1
发表于 2017-1-24 16:42:35 | 显示全部楼层 |阅读模式
我用的是STM32F103做了一个小控制项目,无一例外涉及到输入,输出和显示。
从开始就没打算用寄存器操作进行编程,直接选择了Stm32CubeMX配置项目模板,使用HAL库函数编程,F1库已经很完善,也没遇到什么Bug。
但是HAL库一直没有找到一个正式的使用手册,只能翻阅CHM帮助。 如果对寄存器熟悉,使用HAL库函数,能更好理解并使用。
使用STM32F1的硬件IIC,使用HAL函数,读写SD3088时钟芯片,运行几个月,没发现IIC死锁的问题,刚开始时很担心这个问题。
STM32的HAL库,使用起来始终没有arduino那样平易近人,mbed在朝这个方向努力,但没有提出一个明确的移植指南。STM32产品很多,内存和外围设备变化多端,网站上的板子导入后,export后需要修改文件来适应自己的MCU片子,移植没有ST的官方确认。ST可以考虑提供经过验证的移植。
C++编程,对于变量管理很方便,但Stm32CubeMX还只能导出C语言的项目框架。


还是希望ST能把STM32的库进一步封装,隐藏底层硬件信息。

自己做的是壁炉控制系统,使用的是1.3寸的OLED屏,做人机交互时,选择了m2tklib,这个库是为文本LCD开发的,主要是给arduino服务,后来才有了ARM支持。也想使用stemwin,初期移植不明白,过几天再试试。
使用的是IAR编译器,遇到一个典型问题:结构体对齐。 这也算是2016做开发一个体验,关于对齐,网上也有文字提过,但多数是考虑STM32是32位MCU,一次读取32Bit(4字节)效率最高。

Stm32CubeMX支持的RTOS是FreeRTOS,编程时我直接按CMSIS封装的函数格式来写。使用osMessagePut,osMessageGet来进行结构体的发送和接受,使用了定长的内存池。
typedef struct
{

  bool fan_smoke_is_on;  
  bool fan_exchange_is_on;
  //uint8_t dummy_0;
  //uint8_t dummy_1;  

  uint16_t fan_smoke_power;  
  uint16_t fan_exchange_power;

} T;


由于使用memory pool,所以就会有Free操作:osPoolFree。
上面这个结构体没有红色部分时,系统运行时,会随机性死机,然后就开始考虑野指针问题。开始也不知道哪里的指针不对啊,就把怀疑的地方注释,等注释到osPoolFree后,不死机了。

比较昨天的代码,发现这个结构体自己修改了成员,然后就考虑是结构体未对齐4字节,释放指针所指内存时,把其他的数据也给修改了。
我这个对齐问题,编译时没有警告。

加上两个dummy数据,程序就正常了,隐约记得看u8g的源代码里也有dummy成员,应该也是对齐考虑。
开始比较迷信IAR优化代码好,结果被stack和heap折腾一通,还是GCC编译器自动管理方便。

<
回复

使用道具 举报

0

主题

44

回帖

0

蝴蝶豆

中级会员

最后登录
2018-11-27
发表于 2017-2-13 16:28:50 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

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