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

如何移植标准的官网代码(裸机,无OS)到iBox开发板上,...

[复制链接]
gaosmile 发布时间:2020-3-3 16:54
今天我们介绍一下如何移植标准的官网代码(裸机,无OS)到iBox开发板上,控制LED闪烁。如此简单的试验,还是希望给你不一样的体验。

【一、安装编译工具Keil】

1、为什么选择keil

在这个操作之前,原本应该解释为什么选择“Cortex-M”,为什么选择“M3”、为什么选择“ST”。这样容易扯远了。所以简单说下,原因无非以下几个维度:
1、成本
2、功耗
3、开发工作量
4、生态
5、易学性、普及度

5 P" U7 h( Q0 I0 y+ r2 D, \
至于为什么选择Keil 没选择 IAR、GCC,是因为配置简单。从支持的芯片的丰富度来说,IAR是不错的选择。对于熟练工来说,工具的差异不大;如同硬件熟练工一样,绘图工具差异不大。
: [; l+ L' j! n) `3 ?; f) @
KEIL 和 IAR Systems都是嵌入式领域系统开发工具和服务商(IDE)的供应商,前者成立于-1986年,总部在德国(如今已被大名鼎鼎的英国ARM公司收购);后者于成立1983年,公司总部位于北欧的瑞典。
二者的最著名的产品分别是 KEIL uVision IDE 和 IAR Embeded Workbench。
估计大部分的开发人员都用过。因为他们都可以很好的支持各种不同版本的MCU。对于不同的开发环境,用久了,便会日久生情。用得顺不顺手,快不快乐,或喜欢,或讨厌等等,都因人而异的。然而我们不能不考虑这个问题:能选择到最适合自己,更有效率的工具,才是最好的。

" c  r; b+ Q- I2 p8 V
KEIL的IDE界面比较通俗易懂,属于平易近人的那种。
IAR呢,界面简洁明了,整体感觉——专业。入门不易,一旦入门还是尽在掌握的感觉。
/ C' Z' Z7 o" t6 _
我们选择的KEIL版本是
1I9S`PYNHUNOEPDD]ZLGR1M.png
2、下载安装包
百度网盘自从“360网盘”停用,就开始限速。
所以我们可以使用其他不限速的下载工具进行下载。
将上面的内容存到自己的网盘,然后用下面这个工具进行下载。
AZ2`}9(UYH7I5PNKTDG}5HM.png
pandownload  工具下载地址:
http://pandownload.com/
- Y' Y0 q, D+ _- r9 b' i
3、安装
下载的压缩包分成三个part,全部下载完成之后解压缩,文件夹中有五个文件。
先安装MDK523这个737MB的安装包,然后安装MDKCM523的安装包。
QQ图片20200303154042.png
安装过程没有注意点,一路NEXT。
* c  d8 f0 R! A2 A& B" i
安装完成之后,点击菜单Project之Manage,选择Pack Install
QQ图片20200303154049.png
QQ图片20200303154054.png

) Y$ w8 w: p, |6 a
Pack Installer窗口打开之后,选择File菜单之   Import,然后选择导入刚刚下载的三个PACK后缀名的文件。
QQ图片20200303154108.png

* g; [$ Q9 v/ d. Y3 Y4 L
4、破解
安装完成后,只剩下破解了。
破解工具只用于学习交流,不用于商业用途。
http://www.hw100k.com/forum.php?mod=viewthread&tid=3506&extra=
QQ图片20200303154624.png
破解统共分7步
1、点击菜单Flie ->License management   获取CID
2、CID复制到破解工具中。
3、选择Target  为ARM
4、点击Generate按钮生成序列号
5、复制序列号
6、粘贴到LIC空格中
7点击ADD LIC
完成破解。
重要,破解时,运行keil,需要用管理员身份运行。

3 Q! Z" ^, V+ {0 B" S
如果你没有破解,就急急忙忙运行工程,试图编译,则给你一个error,提示如下:
Check that your license details are correct in the License Management dialog of MDK. Additional information is available at:

% e/ ^  Z2 x* H8 ^% t, e4 I# }
至此,安装破解完成。
安装好之后,我们就可以拿出我们的开发板硬件iBox了。

+ C9 d- i$ O( h$ C; R* l5 ~
【二、下载和使用ST官方源代码】
我们学习的过程,最好要学习使用官方的源码。其他开发板的代码,建议都只作为参考。因为每个人有每个人的编码习惯,可能一些差异。* r) ?: h) H4 B9 U) t
不同公司对代码规范、代码结构的要求会有不同。
所以,我们从官方代码作为开始。按照自己公司的要求,和自己能够理解的习惯进行编码,在实践中提升。
总之,对代码还是要尽在掌握,熟练驾驭、不能囫囵吞枣。

0 i0 C' f# y6 T1 ?  W. ]
1、MCU
简单介绍一下我们的 iBox物联网开发板的硬件系统:
核心芯片是STM32F103ZET6
QQ图片20200303154634.png
3 o% A5 D6 l0 n8 A

8 n$ d& I) o4 K+ q. ^7 D# g) u
原理图pdf下载地址:
http://www.hw100k.com/forum.php?mod=viewthread&tid=3501&extra=page%3D1
) B1 P, K" H) `4 }; V( H" M$ F) k
2、使用 ST 官网
如果你很熟悉,可以跳过这个章节。但是根据本人观察,很多长期使用STM32的工程师其实没有仔细看过官网。

5 E# g) m* b' k3 W: \& P
http://www.st.com     进入之后,我们进入Tool&Software去下载STM32标准库
QQ图片20200303154649.png
8 `% z7 M0 C6 H. ?$ G. q

进入嵌入式软件页面之后,可以看到左下角  For STM32 MCUs
4 n3 C# L( Q" H! V# f5 W

QQ图片20200303154654.png
提醒:如果你没有注册、可以注册账号后登陆。下载代码,需要登陆之后才可以下载。
' o* I! n" S, z, T* E( d: ]
进入之后,在页面最下面,有个“Download”。点击之后,可以下载。
QQ图片20200303155312.png
点击“Download”之后,下载一个压缩包。
9 A# [# v7 [4 A9 [
文件名为:en.stsw-stm32054.zip
解压缩之后,文件夹名称:STM32F10x_StdPeriph_Lib_V3.5.0
6 n2 T& v# Q' F( p( C
你也可以用下面链接粘贴到浏览器,直接下载:
http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries.html?querycriteria=productId=LN1939%20
1 N3 l) D. c% P( h1 a- c
选择你对应的MCU类别,比如我们iBox选择F1
QQ图片20200303155318.png
现在我们就已经下载下来一个完整的STM32的官方标准外设库文件包。

4 c8 n& p- Y$ S, e0 }* X
我们现在直接进入MDK-ARM文件夹,打开Keil的工程。% E$ U3 s% V" R. b+ o6 r
文件目录如下:
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM
QQ图片20200303162928.png
双击打开。
% E' W. }/ d6 A
我们可以尝试一下编译(Build)和下载程序(Download)
QQ图片20200303162936.png
当我们电机 Download那个图标时,我们发现下载不了,找不到你的下载工具。
+ ^7 G7 l6 H2 y2 g1 C  F

! o" {. R& p' Q/ v4 E! k

: y* D# }( w2 a- W
3、使用Jlink进行代码烧写
那么,我们需要做几个准备工作,才可以进行代码烧写:
1、把Jlink连上
2、安装Jlink
3、配置芯片等烧写环境

8 G* S0 ^) e7 ]2 ^9 p: i  Q
1、看图
QQ图片20200303162942.png
2、首先我们安装Jlink
下载安装包,下载地址如下:
http://www.hw100k.com/forum.php?mod=viewthread&tid=3507&extra=
安装注意事项:无;一路 next
( x9 w. w" Z, t' R
测试一下,我们的工具是否可以连接上我们的MCU
点击开始菜单:SEGGER-  Jlink-FLASH

; V. k" S: q/ @) z( p

打开JLINK软件,它可能会提示建了工程,随便建立一个就行


) _* B3 U0 |) a. \9 |. I

7 A3 \7 S0 c9 S+ n. f4 H
打开配置页面,点击Options->Project settings,会进入到配置页面
9 o; _1 ?- l- ~2 O
) S# @; v6 {2 U0 U; k
配置页面如下图所示,下面进行选择单片机
QQ图片20200303162948.png

4 [: |$ _9 Q- y3 Y! q
点击CPU,选择STM32单片机
QQ图片20200303162954.png

) M+ o+ \, @+ u- D* \
' m/ ^$ H/ E1 P8 P
点击Target     Connect  将JLINK和目标板进行连接。
QQ图片20200303163005.png

0 F% j7 X" ^$ ?* }- x
如果连接成功,说明单片机和Jlink烧写器都是好的,驱动也安装成功啦。

) {; K% `, q: w' i+ Y$ R
然后我们可以尝试用Keil5里面的Download试下,应该可以少写了。
(至于用J-Flash如何烧写,按下不表)
3、先别急,我们需要配置芯片,让编译工具和电脑知道我们电路板上面芯片的型号。

7 s2 C3 [, [, I: n
选择Flash里面的Configure  Flash Tools
QQ图片20200303163012.png

! M* f+ Y3 G3 t- |; q

我们需要在Device里面选择我们的芯片型号,如下:

QQ图片20200303163017.png
选择Debug  选择Jlink0 m% U6 w. c7 {4 e/ D
QQ图片20200303163026.png
选择Utilities,选择Jlink
QQ图片20200303163033.png
1 `  a% a3 ?  d( u6 X
点击Debug里面的  右边的Settings
QQ图片20200303164102.png

0 `2 z# Q* x/ v+ ~/ t, ]/ `- ]2 j/ e
选择Debug里面的Port 修改JTAG为   SW
QQ图片20200303164108.png
3 A" K0 T8 m# @6 |1 o
现在,我们就可以下载啦。
0 r/ _( H* e. {0 a/ H

) Q$ z% j4 ?0 D/ R! m9 d5 `& j: Q
4、修改源码,实现闪灯
4.1删除不需要的功能
至此,我们并没有关心官方的源码到底写了什么内容。
那么我们看下main函数

, w7 r% d  I8 Z! P0 g
这个工程是基于STM32 官方的EVM板,这套代码为了支持4套开发板,所以做了4组宏定义,选择。我们在此暂时忽略。
我们将UART、LCD等于我们实验目的无关的代码删除,则,只保留两段代码,如下,一段是LEDInit、一段是LEDOn
我们根据函数的定义,可以顾名思议:LEDInit是LED初始化,LEDOn是LED点亮。
QQ图片20200303164750.png
4.2 研究 一下LED相关的函数和变量
$ B6 e- l' m7 i' c& }. o' T! _
我们研究一下这STM_EVAL_LEDInit()   LED初始化函数
鼠标放在这个函数上面,右键选择  跳转到  “STM_EVAL_LEDInit”

/ ?0 n- o% L. ?) @  ~
) j5 J' n; g& F: B9 S1 s0 ^
跳转过去之后,我们可以看到这个就是一个标准的GPIO初始化的函数。
6 k+ \# t3 l! w( _9 ]- w
3 i  R- I6 T! T& D' M
我们去查看一下这几个数组,是如何定义的。

) X$ C& O- j& |6 P% I' J
QQ图片20200303164756.png
由此,我们可以看到,在原始代码里面定义了四个LED的控制GPIO,分别是:  d  A5 b  y+ y9 s) Z8 H$ R% \7 M
F6、F7、F8、F9
# [2 a5 y9 L' k8 e! i
我们查看一下原理图,看看iBox上面的控制LED的GPIO分别是哪几个。
QQ图片20200303164801.png
iBox上面一共有四个LED,红色LED是电源指示灯,不能用GPIO控制。
我们可以看下原理图:
QQ图片20200303164806.png
红色LED的正极接3V3,负极通过一个电阻接GND。
另外三个颜色的灯分别接到GPIO进行控制。

# J3 D& Z1 A2 u
: b! R/ A% m8 k5 U' D
通过查阅MCU的管脚连接,我们可以看到# o$ @7 ]$ Z: Y" {  X# S
PE9控制绿灯
PE10控制黄灯
PE12控制白灯
& d7 D- ~( ]3 }" C% N% a- e
我们可以修改代码里面LED1、LED2、LED3的管脚号,对我们电路板上的LED控制GPIO进行控制。
QQ图片20200303164811.png
将上面的LED1的几个值修改为:
GPIOE   
GPIO_Pin_9
RCC_APB2Periph_GPIOE
同样方法,我们修改LED2、LED3
; j! n+ i! u* U  Y. {6 [2 J
修改完成之后,我们的初始、以及对LED进行控制的代码,就是我们iBox电路板上面的几个LED对应的管脚了。
) {+ \7 m" r  ~. x6 u
研究完初始化代码之后,我们研究一下
STM_EVAL_LEDOn函数,我们用右键跳转的方式,查看函数定义。
QQ图片20200303164815.png
+ f% A& ]/ F: |# H
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。
GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。
GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。
- G& U. O: Y' I6 E, k1 s$ j
此处,我们先简单理解:
比如希望快速地对GPIOE的位7进行翻转,则可以:
GPIOE->BSRR = 0x80; // 置'1'
GPIOE->BRR = 0x80; // 置'0'
库文件里面已经对各个管脚进行了二进制的对应位进行了定义。
QQ图片20200303164819.png
# M4 D9 ]* B7 J. ^( w. T
所以,我们想让GPIO为低,则运行
GPIO_PORT[Led]->BRR = GPIO_PIN[Led];

# N- D1 l% Y. r2 @9 I; E
如果我们想让GPIO为高,则运行
GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];

. q# d; G' F2 Q
按照我们的原理图,我的GPIO为低时,LED亮、GPIO为高时,LED灭。
所以我们需要修改函数,如下:
QQ图片20200303164824.png
编译,烧录。我们就可以看到,咱么iBox上的LED按照我们的预期点亮。
5 Z, j  e. j. S8 Q, }7 [. E; t
至此,咱们的第一个实验完成。

- i* F% J. [5 I$ S: d# U! D* E
$ B/ ]1 |4 ]; ~1 ~8 q- L- Y
赞 收藏 评论0 发布时间:2020-3-3 16:54

举报

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