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

教你如何将ST官方生成的MCU代码(hal库)移植到标准库

[复制链接]
木木&点点 发布时间:2019-12-26 10:59
前言
手头上正好有STM32的开发板和ESP-12E模块,想着控制个WS2812玩玩。到MCU开发的时候下载了生成的代码发现是HAL库的,无奈自己刚刚学习stm32,用的是标准库,在论坛发现关于STM32CubeMX移植的教程满天飞,标准库却寥寥无几,发现有很多群友和我一样刚刚接触不知道怎么移植,这里参考了官方的移植MSP340教程并修改出适用于STM32标准库的教程。

0 q6 Q6 u  T( [) }0 S8 \# H, ]* u) `; _3 E1 G/ d
进入正文
/ J# {8 Q6 t% \0 e
步骤1、下载好的代码包是这样的,需要把这两个文件夹直接复制到自己工程的文件夹里面:
1.jpg
2.jpg ' @' H3 v6 H  ~5 G
6 l& e  |2 H' B. R+ Z4 A  l2 f
步骤2、添加到自己的工程组里面,并添加路径:. @$ [& @- M; N. X4 r$ h: X
3.jpg 4 z- Y9 P8 K8 [% P8 r; @; c
4.jpg ) z! t% s5 d+ B$ g/ Z' z

0 H  j" b5 T% I& _* _5 _+ x+ P% ?8 Y8 X
步骤3、正题来了,现在开始移植工作,需要修改的文件分别如下:* d# z" u" P+ _( ~$ f; K# s: {+ W
3.1、打开gizwits_product.h 需要修改的地方如下,查看代码行数可以快速找到)
! V% C8 B3 i5 b) |; s! q; |9 c 5.jpg
3 h" {0 }4 ~. i5 E3.2、打开gizwits_product.c,需要修改的地方如下:7 p/ }- G$ |9 V: E; q  ^
6.jpg / }0 M1 j+ f$ n, ~! [
7.jpg + Q' G% l5 D0 g2 T

  M, g4 M/ _2 f* d1 v$ ?
6 F. b: N3 B. M, K! C" q下面删除的几个初始化函数很重要...必须自己写好,要能正常使用
4 w2 }1 [+ W) j0 w$ f- O5 V 8.jpg * |7 c' L3 ]/ c( S# ]

6 x! T- D6 c& t  T. P- X) y接下来是串口发送函数,我用的是DMA+中断发送接收的,修改成能发送数据的函数..建议先把串口功能调试好在填入调用
4 q- ^9 `) d( v- [
  • int32_t uartWrite(uint8_t *buf, uint32_t len)( S4 }9 ~% t9 |: e% t# \! f1 f
  • {& ?4 Y$ a7 ~( f
  •     uint32_t i = 0;
    5 t  [* q+ Q$ F) E3 Q
  •     if(NULL == buf)
    2 Z3 R7 E) {3 i. K5 p9 b9 f
  •     {* S. j7 T& d* k' G
  •         return -1;
    / k. d) Q0 P& d: F" `( A4 |
  •     }
    9 K" M9 l' \: `
  •     for(i=0; i<len; i++): p9 V& w- M+ o+ Z3 C# w
  •     {6 e- \; f0 u; e8 N4 s' w
  •          //这里填入串口发送函数$ D3 v8 s3 J' d" B
  •           TxBuff_esp8266=*buf++;
    + u4 u' }- y; _9 X% k
  •        /* if(i >=2 && buf == 0xFF); Q7 k' C" m+ j: ^6 f5 j8 ~7 J
  •         {                        
    ( I! z$ ]- E; }/ d4 S7 m6 U# ]
  •              //这里填入串口发送函数,发送0x55,意思是遇到0xFF后面要加0x55
    6 f: ~0 ~  W; |( ~! E/ B! \. S6 b
  •              //这地方折腾了很久才成功,官方的大神说要加上,但是我删除了也可以用,求解释  w: _/ T& ~" S4 T0 p0 n: F
  •              //官方说是要求加上的..我直接删除了也能用,你们要是这里加了不行的话也删掉试试
    4 Z8 T5 f3 n' F: F' r- a
  •         }*/

    6 B" O( u( R- P" X+ j# E1 w0 y

( y+ }- h8 S5 p- j) s4 x
修改好了记得保存。

+ a- z" ?9 W. d8 H步骤4、接下来打开main.c文件% i9 J( k9 Z9 P1 p
添加自己的初始化代码,并且调用gizwits的相关函数
( i, B0 l3 p! d记得把这两个头文件包含进去
2 C# u& e# X# n" d
  • #include "gizwits_product.h"
    7 R5 Q/ i2 u- i' ]2 B6 d9 n
  • #include "common.h"

    ; b- U- Q6 e1 K7 R' x

: y# Z8 P& x4 L3 {4 Y
9.jpg
5 M  o* t' C! ^" j7 T7 Z* V, {我的初始化函数是自己封装的,比较简陋,反正功能能实现就行了9 ]+ Z1 X. c, {$ j# a% x5 b
( k0 |% A5 |' l3 ]
步骤5、修改中断函数
, J5 P  b( ]3 C6 ]5 N  E/ A 10.jpg
- f) W, T$ z/ a8 H8 B: V" O$ ~. w7 p5 j2 U& X
接下来就是编译了,要是有错误的地方看一下是不是外部函数调用的时候没有包含进函数所在的头文件。
" U8 b: S/ z. y: y( I( W" w3 G7 V- e. Q2 h" m% f- N$ a% J1 s
步骤6、打开gizwits_product.c,找到gizwitsEventProcess的函数,下面那里有你添加的数据点,可以添加自己想要的功能。
举个栗子我的是控制WS2812,直接在里面调用WS2812的亮灯函数,把读到的数据颜色数据填入就可以了6 p) N3 }" z8 r, R1 o
11.jpg
9 q, Q: B7 h2 g. E2 c移植的步骤大概就是这么多,试了一下烧录了进去确实可以用app控制。还有很多功能没有调试,剩下的功能要去参考其他大神的了。静静的做一名的伸手党。
12.jpg
+ ]* F! I, v/ s- b3 j5 r
要是有什么错误的地方请指正,我也是这两天刚刚琢磨出来,希望能互相学习。
  _- t- I$ r( ^2 k7 O: K( w诶,那个,第一次写教程,stm32也刚接触没多久,水平有限,有什么写得不好或者错了的地方请告之改正

5 i7 ~" o8 H, T+ S3 E
6 l# |& i) Z$ A* o4 |5 K; @- m( O7 [0 h8 Z: W( ~; C( E+ F
附上参考官方的移植MSP430教程:
赞 收藏 2 评论2 发布时间:2019-12-26 10:59

举报

2个回答
slotg 回答时间:2019-12-26 11:24:57
这个好,收藏了。
慎微 回答时间:2019-12-26 13:24:51
valuable
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版