0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从原理图PCB到移植RTOS是怎么一回事

wFVr_Hardware_1 来源:ct 2019-08-20 17:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【前言】

iBox相关教材推出以来,不少朋友还希望针对软件开发进行细致讲解。

为此,我们将陆续针对iBox的STM32物联网开发的一些细节,进行分享。

今天是第一章节,我们介绍一下如何移植标准的官网代码(裸机,无OS)到iBox开发板上,控制LED闪烁。如此简单的试验,还是希望给你不一样的体验。

【一、安装编译工具Keil

1、为什么选择keil

在这个操作之前,原本应该解释为什么选择“Cortex-M”,为什么选择“M3”、为什么选择“ST”。这样容易扯远了。所以简单说下,原因无非以下几个维度:

1、成本

2、功耗

3、开发工作量

4、生态

5、易学性、普及度

至于为什么选择Keil 没选择 IAR、GCC,是因为配置简单。从支持的芯片的丰富度来说,IAR是不错的选择。对于熟练工来说,工具的差异不大;如同硬件熟练工一样,绘图工具差异不大。

KEIL和IAR Systems都是嵌入式领域系统开发工具和服务商(IDE)的供应商,前者成立于-1986年,总部在德国(如今已被大名鼎鼎的英国ARM公司收购);后者于成立1983年,公司总部位于北欧的瑞典。

二者的最著名的产品分别是KEIL uVision IDE和IAR Embeded Workbench。

估计大部分的开发人员都用过。因为他们都可以很好的支持各种不同版本的MCU。对于不同的开发环境,用久了,便会日久生情。用得顺不顺手,快不快乐,或喜欢,或讨厌等等,都因人而异的。然而我们不能不考虑这个问题:能选择到最适合自己,更有效率的工具,才是最好的。

KEIL的IDE界面比较通俗易懂,属于平易近人的那种。

IAR呢,界面简洁明了,整体感觉——专业。入门不易,一旦入门还是尽在掌握的感觉。

我们选择的KEIL版本是

2、下载安装包

链接:https://pan.baidu.com/s/1u955P7trvFYMOAghlj0Y2w 密码:y4gy

百度网盘自从“360网盘”停用,就开始限速。

所以我们可以使用其他不限速的下载工具进行下载。

将上面的内容存到自己的网盘,然后用下面这个工具进行下载。

pandownload 工具下载地址:

http://pandownload.com/

3、安装

下载的压缩包分成三个part,全部下载完成之后解压缩,文件夹中有五个文件。

先安装MDK523这个737MB的安装包,然后安装MDKCM523的安装包。

安装过程没有注意点,一路NEXT。

安装完成之后,点击菜单Project之Manage,选择Pack Install

Pack Installer窗口打开之后,选择File菜单之 Import,然后选择导入刚刚下载的三个PACK后缀名的文件。

4、破解

安装完成后,只剩下破解了。

破解工具只用于学习交流,不用于商业用途。

http://www.hw100k.com/forum.php?mod=viewthread&tid=3506&extra=

破解统共分7步

1、点击菜单Flie ->License management 获取CID

2、CID复制到破解工具中。

3、选择Target 为ARM

4、点击Generate按钮生成序列号

5、复制序列号

6、粘贴到LIC空格中

7点击ADD LIC

完成破解。

重要,破解时,运行keil,需要用管理员身份运行。

如果你没有破解,就急急忙忙运行工程,试图编译,则给你一个error,提示如下:

Check that your license details are correct in the License Management dialog of MDK. Additional information is available at:

http://www.keil.com/support/man/docs/license/license_management.htm

至此,安装破解完成。

安装好之后,我们就可以拿出我们的开发板硬件iBox了。

【二、下载和使用ST官方源代码】

我们学习的过程,最好要学习使用官方的源码。其他开发板的代码,建议都只作为参考。因为每个人有每个人的编码习惯,可能一些差异。

不同公司对代码规范、代码结构的要求会有不同。

所以,我们从官方代码作为开始。按照自己公司的要求,和自己能够理解的习惯进行编码,在实践中提升。

总之,对代码还是要尽在掌握,熟练驾驭、不能囫囵吞枣。

1、MCU

简单介绍一下我们的 iBox物联网开发板的硬件系统:

核心芯片是STM32F103ZET6

原理图pdf下载地址:

http://www.hw100k.com/forum.php?mod=viewthread&tid=3501&extra=page%3D1

2、使用 ST 官网

如果你很熟悉,可以跳过这个章节。但是根据本人观察,很多长期使用STM32的工程师其实没有仔细看过官网。

https://www.st.com 进入之后,我们进入Tool&Software去下载STM32标准库

嵌入式软件页面之后,可以看到左下角 For STM32 MCUs

提醒:如果你没有注册、可以注册账号后登陆。下载代码,需要登陆之后才可以下载。

进入之后,在页面最下面,有个“Download”。点击之后,可以下载。

点击“Download”之后,下载一个压缩包。

文件名为:en.stsw-stm32054.zip

解压缩之后,文件夹名称:STM32F10x_StdPeriph_Lib_V3.5.0

你也可以用下面链接粘贴到浏览器,直接下载:

https://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

选择你对应的MCU类别,比如我们iBox选择F1

现在我们就已经下载下来一个完整的STM32的官方标准外设库文件包。

我们现在直接进入MDK-ARM文件夹,打开Keil的工程。

文件目录如下:

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template\MDK-ARM

双击打开。

我们可以尝试一下编译(Build)和下载程序(Download)

当我们电机 Download那个图标时,我们发现下载不了,找不到你的下载工具。

3、使用Jlink进行代码烧写

那么,我们需要做几个准备工作,才可以进行代码烧写:

1、把Jlink连上

2、安装Jlink

3、配置芯片等烧写环境

1、看图

2、首先我们安装Jlink

下载安装包,下载地址如下:

http://www.hw100k.com/forum.php?mod=viewthread&tid=3507&extra=

安装注意事项:无;一路 next

测试一下,我们的工具是否可以连接上我们的MCU

点击开始菜单:SEGGER- Jlink-FLASH

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

打开配置页面,点击Options->Project settings,会进入到配置页面

配置页面如下图所示,下面进行选择单片机

点击CPU,选择STM32单片机

点击Target Connect 将JLINK和目标板进行连接。

如果连接成功,说明单片机和Jlink烧写器都是好的,驱动也安装成功啦。

然后我们可以尝试用Keil5里面的Download试下,应该可以少写了。

(至于用J-Flash如何烧写,按下不表)

3、先别急,我们需要配置芯片,让编译工具和电脑知道我们电路板上面芯片的型号。

选择Flash里面的Configure Flash Tools

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

选择Debug 选择Jlink

选择Utilities,选择Jlink

点击Debug里面的 右边的Settings

选择Debug里面的Port 修改JTAG为 SW

现在,我们就可以下载啦。

4、修改源码,实现闪灯

4.1删除不需要的功能

至此,我们并没有关心官方的源码到底写了什么内容。

那么我们看下main函数

这个工程是基于STM32 官方的EVM板,这套代码为了支持4套开发板,所以做了4组宏定义,选择。我们在此暂时忽略。

我们将UART、LCD等于我们实验目的无关的代码删除,则,只保留两段代码,如下,一段是LEDInit、一段是LEDOn

我们根据函数的定义,可以顾名思议:LEDInit是LED初始化,LEDOn是LED点亮。

4.2 研究 一下LED相关的函数和变量

我们研究一下这STM_EVAL_LEDInit() LED初始化函数

鼠标放在这个函数上面,右键选择 跳转到 “STM_EVAL_LEDInit”

跳转过去之后,我们可以看到这个就是一个标准的GPIO初始化的函数。

我们去查看一下这几个数组,是如何定义的。

由此,我们可以看到,在原始代码里面定义了四个LED的控制GPIO,分别是:

F6、F7、F8、F9

我们查看一下原理图,看看iBox上面的控制LED的GPIO分别是哪几个。

iBox上面一共有四个LED,红色LED是电源指示灯,不能用GPIO控制。

我们可以看下原理图:

红色LED的正极接3V3,负极通过一个电阻接GND。

另外三个颜色的灯分别接到GPIO进行控制。

通过查阅MCU的管脚连接,我们可以看到

PE9控制绿灯

PE10控制黄灯

PE12控制白灯

我们可以修改代码里面LED1、LED2、LED3的管脚号,对我们电路板上的LED控制GPIO进行控制。

将上面的LED1的几个值修改为:

GPIOE

GPIO_Pin_9

RCC_APB2Periph_GPIOE

同样方法,我们修改LED2、LED3

修改完成之后,我们的初始、以及对LED进行控制的代码,就是我们iBox电路板上面的几个LED对应的管脚了。

研究完初始化代码之后,我们研究一下

STM_EVAL_LEDOn函数,我们用右键跳转的方式,查看函数定义。

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',则对它对应的端口不起作用。

此处,我们先简单理解:

比如希望快速地对GPIOE的位7进行翻转,则可以:

GPIOE->BSRR = 0x80; // 置'1'

GPIOE->BRR = 0x80; // 置'0'

库文件里面已经对各个管脚进行了二进制的对应位进行了定义。

所以,我们想让GPIO为低,则运行

GPIO_PORT[Led]->BRR = GPIO_PIN[Led];

如果我们想让GPIO为高,则运行

GPIO_PORT[Led]->BSRR = GPIO_PIN[Led];

按照我们的原理图,我的GPIO为低时,LED亮、GPIO为高时,LED灭。

所以我们需要修改函数,如下:

编译,烧录。我们就可以看到,咱么iBox上的LED按照我们的预期点亮。

至此,咱们的第一个实验完成。

后一集,我们要用Keil建立一个全新的工程,然后利用官方库文件,裁剪掉不需要的内容,做一个属于自己的第一个工程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 原理图
    +关注

    关注

    1341

    文章

    6423

    浏览量

    244885
  • pcb
    pcb
    +关注

    关注

    4391

    文章

    23746

    浏览量

    420850

原文标题:从原理图PCB到移植RTOS【细说STM32】【一】

文章出处:【微信号:Hardware_10W,微信公众号:硬件十万个为什么】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    pcb丝印是怎么一回事

    发表于 12-02 13:47

    【11/27 直播报名】“站式” PCB 设计 · 25.1 I 第二期:高效高质量原理图设计

    AllegroX25.1版本已正式发布!全新的库设计及管理方案、原理图PCB设计集成、设计同步分析,为工程师带来原理图投板(Gerbe
    的头像 发表于 11-14 14:48 416次阅读
    【11/27 直播报名】“<b class='flag-5'>一</b>站式” <b class='flag-5'>PCB</b> 设计 · 25.1 I 第二期:高效高质量<b class='flag-5'>原理图</b>设计

    单片机和嵌入式,到底是什么关系?

    很多人初次接触嵌入式开发时,都会听到句话:“嵌入式其实就是单片机。”可当你真正开始学习时,会发现嵌入式和单片机虽然经常“捆绑”在起提,但它们好像又不是一回事。这篇文章,我们就来厘清这两个概念
    的头像 发表于 11-14 10:28 597次阅读
    单片机和嵌入式,到底是什么关系?

    请问芯源MCU如何移植RTOS

    请问芯源MCU如何移植RTOS?有相关的移植教程嘛?
    发表于 11-14 07:58

    PCBA和SMT总混淆?文讲透电子制造的“组装”与“贴片”核心差异

    站式PCBA加工厂家今天为大家讲讲PCBA和SMT之间有什么区别和联系?PCBA和SMT之间的区别和联系。PCBA和SMT并非一回事,它们在电子制造领域中分别代表不同的概念和工艺阶段,具体区别如下
    的头像 发表于 11-03 09:51 384次阅读

    麻烦提点原理图pcb上建议

    麻烦各位大佬原理图pcb点建议。
    发表于 10-15 14:20

    ART-Pi中启用外部flash是在哪里配置了qspi的引脚呢?

    ,于是我去查找QSPI的io是有复用引脚的,也就是说不是绝对的像晶振连接那样子的io固定就是那两个。那么想请教下各位这个qspi的配置是怎么一回事呢。 提前谢谢各位佬!
    发表于 10-10 06:09

    用更简便的方法构建强大边缘 AI 应用

    作者: Stephen Evanczuk 设计款基于传感器的简单物联网 (IoT) 设备并非难事,但要打造具备边缘机器学习 (ML) 处理能力的联网设备则完全是另一回事。NXP
    的头像 发表于 10-04 18:30 1408次阅读
    用更简便的方法构建强大边缘 AI 应用

    别再搞混了!安规Y电容的「耐温」和「温度特性」根本不是一回事

    选错个电容,可能毁掉整个产品 在日常的电源设计和EMC整改中,安规Y电容是我们再熟悉不过的元器件。但你是否曾经困惑过: datasheet上标注的125℃和Y5V到底有什么区别? 很多工程师容易将
    发表于 09-08 09:54

    用了 10 年网才明白!"带宽”“宽带”原来不是一回事!#带宽 #宽带 #数据采集卡 #模拟信号 #电路知识

    模拟信号
    西安阿尔泰电子科技发展有限公司
    发布于 :2025年07月23日 09:23:48

    原理图PCB设计中的常见错误

    在电子设计领域,原理图PCB设计是产品开发的基石,但设计过程中难免遇到各种问题,若不及时排查可能影响电路板的性能及可靠性,本文将列出原理图PCB设计中的常见错误,整理成
    的头像 发表于 05-15 14:34 911次阅读

    今天带你来看看防逆流是什么?光伏防逆流又是怎么一回事

    、什么是光伏防逆流 分布式光伏发电系统中,发电量超本地负载耗电量时,多余电能可能逆向流入电网,此为 “逆流”。光伏防逆流即借助技术手段与设备,防止或限制这种逆流。安科瑞+武陈燕
    的头像 发表于 05-14 16:40 1829次阅读
    今天带你来看看防逆流是什么?光伏防逆流又是怎么<b class='flag-5'>一回事</b>?

    让人欲罢不能树莓派贪吃蛇掌机!

    在RaspberryPi上玩复古游戏是一回事,但从零开始编程制作游戏则是另层面的挑战。不过,创客兼开发者ArnovSharma的这个项目将两者完美结合。他使用我们最爱的单板计算机,打造了款能运行
    的头像 发表于 03-25 09:21 538次阅读
    让人欲罢不能树莓派贪吃蛇掌机!

    AD原理图PCB超详细教程

    前言 我在学习AD的时候,看了网上很多教程,但是东西很杂,有很多条理不清而且废话很多,所以相信大家学习的时候也是遇到样的困难。我就特地写篇帖子,整理了下AD
    的头像 发表于 02-18 10:13 8046次阅读
    AD<b class='flag-5'>从</b><b class='flag-5'>原理图</b><b class='flag-5'>到</b><b class='flag-5'>PCB</b>超详细教程

    为什么TLC7135C初始加电后D1~D5数字输出时0,直到对引脚3(ANLG COMMON)触碰下,才开始正常数值输出?

    是43.3mv,基准电压是1.138V,芯片输出数值03648左右慢慢升到了04006左右,求教是怎么一回事,哪里有问题
    发表于 01-07 07:45