历史上的今天
返回首页

历史上的今天

今天是:2025年07月10日(星期四)

正在发生

2019年07月10日 | STM32入门之旅(第二天)-------开发环境搭建、库函数使用

2019-07-10 来源:eefocus

一.如何学习STM32

学好STM32的编程,学好它提供好的库函数就可以了。ST公司会提供STM32的所有库函数的源码与使用手册!

1)C语言

2)阅读库函数与帮助文档,告诉函数的调用次序,详细实现的功能。

3)使用Keil工具,集合可视化编写代码、编译代码、下载运行、程序仿真用于跟踪代码。


4)熟悉外围设备使用,阅读时序图、英文文档


二、搭建ARM Cortex-M4的开发环境

1、安装Keil公司第五代软件开发板平台,Keil 5 或 MDK 5,版本MDK5.14,可以编写代码、编译代码、下载程序。

a.安装mdk514.exe

b.看情况是否去破解软件

1)如果当前编译的程序小于32KB,可以不用破解软件。如果大于32KB,就得破解该软件。

2)如果用于商业用途,最好是购买它的正版授权。


2.安装芯片资料包,包含芯片的函数库来驱动其硬件,相关的例子文档,芯片资料包是由芯片公司编写好之后上传给Keil公司,然后分发下载。


a.下载网址 http://www.keil.com/dd2/pack


三、创建工程


1、创建完工程之后,会出现编译警告出错问题,解决方法可以参考以下注释,因此新建工程后,必须在工程选项卡当中,【C/C++】中的全局宏定义添加"USE_STDPERIPH_DRIVER",即这个定义控制了是否在应用中启用外设驱动。我们使用标准外设库本来就为了方便控制外设,所以要添加这个定义,以启用外设驱动。


2、添加头文件路径,在工程选项卡当中,【C/C++】中的“Include Paths”添加相应的头文件路径,否则这些文件会出现感叹号,编译器说找不到。.RTEDeviceSTM32F407ZE;.RTE

上述包含两个头文件路径,不同的头文件路径以分号进行隔离。

设置成功之后,记得要删除工程目录下的Listings与Objects文件夹,最后进行重新编译。


3、编译的时候,总是出现以下警告,


main.c(8): warning:  #1-D: last line of file ends without a newline //文件末尾没有新行

解决方法:每个公司都有自己的编写代码规范,都需要看到回车换行,在文件末尾按一下回车键。


4、设置Keil编译完之后,生成Hex文件。

在工程选项【output】的标签,勾选“Create HEX File”。

重新编译之后,就生成一下信息。

Build target 'led'

FromELF: creating hex file...

.Objectsproject.axf" - 0 Error(s), 0 Warning(s).


四、GPIO的库函数

GPIO:通用的输入输出口

GPIOA:GPIO的A端口

GPIOG:GPIO的G端口

高电平:3.3v电压

低电平:0V电压

STM32库函数的代码规范


硬件名称(大写)_功能

GPIO_SetBits

RCC_AHB1PeriphResetCmd 

P(PORT)A0:GPIO端口A的第0个引脚

PA1:GPIO端口A的第1个引脚


PB0:GPIO端口B的第0个引脚


五、通过J-Link仿真下载器进行下载代码

1)J-Link正确连接到开发板

2)安装驱动Setup_JLinkARM_V415e.exe

3)在工程选项的【Debug】标签,选中“J-LINK/J-TRACE Cortex”,接着点击“settings”,设置port为“sw”,频率为“5MHz”;然后点击【Flash Download】,勾选“Reset and Run”。最后点击“确定”按钮退出。


4)在Keil5 界面当中,点击“Download”图标,就可以进行程序下载。


六、使用库函数编程技巧

1、阅读硬件原理图《GEC-M4原理图2016-07-29.pdf》,了解当前需要使用STM32芯片哪个硬件,就可以知道使用哪些库函数接口。

2、使用库函数的时候,只需要了解该函数的使用方法,如传入参数、返回值、功能描述就足矣。库函数里面的编写内容不需要了解,这些代码都是由ST公司去实现的。

3、如何使用库函数实现一个具体的功能,ST公司都会提供例子文档,告诉我们库函数如何使用,无论是新手还是老手都要看的。

.STM32F4xx中文参考手册.pdf

.stm32f4xx_dsp_stdperiph_lib_um.chm

4.使用的编程标准C,也就是ANSI C编程。


#include "stm32f4xx.h"

#include "sys.h"#

#include "delay.h"

static GPIO_InitTypeDef  GPIO_InitStructure;

 

int main(void)

{

  /* GPIOG Peripheral clock enable */

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);

/* Configure PG6 and PG8 in output pushpull mode */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;         //设置第几引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置引脚为输出模式

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;              //引脚翻转频率为100MHz

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //引脚浮空

GPIO_Init(GPIOF, &GPIO_InitStructure);

//GPIO_SetBits(GPIOF, GPIO_Pin_9 );

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);         /* Configure PG6 and PG8 in output pushpull mode */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 ;

GPIO_Init(GPIOE, &GPIO_InitStructure);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

 

 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3| GPIO_Pin_4 ;

GPIO_Init(GPIOE, &GPIO_InitStructure);

while(1)

{

    PEout(13) = 1;

            PEout(14) = 1;

            PFout(9)  = 1;

            PFout(10) = 1;

    delay();

 

 

    if(PAin(0) == 0)

    {

PFout(9)  = 0;

delay();

PFout(9)  = 1;

    }

    if(PEin(2) == 0)

    {

PFout(10) = 0;

delay();

PFout(10) = 1;

     }

     if(PEin(3) == 0)

     {

PEout(13) = 0;

delay();

PEout(13) = 1;

     }

     if(PEin(4) == 0)

     {

PEout(14) = 0;

delay();

PEout(14) = 1;

     }

}

return 0;

}


推荐阅读

史海拾趣

FLEX LTD公司的发展小趣事

Flex Ltd.(伟创力国际有限公司),作为全球知名的电子制造服务(EMS)供应商,自1969年在美国硅谷成立以来,经历了多个关键的发展阶段和故事。以下是五个与其发展紧密相关的事实性故事:

1. 全球布局的开端:新加坡建厂

1981年,Flex Ltd.在新加坡建立了其第一个海外工厂,这一举措标志着公司正式走出美国,开启了全球化布局的序幕。新加坡工厂的建立不仅为Flex带来了更低的制造成本,还使其能够更贴近亚洲市场,为客户提供更快捷的服务。这一战略性的地理选择为Flex后续在全球范围内的扩张奠定了坚实基础。

2. 纳入纳斯达克上市

随着业务的不断扩展和实力的增强,Flex Ltd.于某年成功在纳斯达克(NASDAQ)上市。这一里程碑事件不仅为公司筹集了更多的发展资金,还极大地提升了其在国际市场上的知名度和影响力。上市后的Flex更加注重财务透明度和公司治理,为股东创造了长期价值。

3. 与华为的合作与风波

Flex与华为的合作曾是业内的佳话。特别是在2018年,Flex承接了华为价值高达25亿美元的代工订单,这一合作极大地推动了Flex的业务增长。然而,随着2019年美国商务部将华为列入“实体清单”,Flex被迫在全球范围内停止与华为的合作,并扣押了华为的物资和设备。这一事件引发了广泛争议,对Flex的声誉和客户关系造成了一定影响。尽管后续双方进行了多轮谈判,但这一风波仍成为了Flex发展历程中一个不可忽视的章节。

4. 供应链的数字化转型

Flex一直致力于通过数字化转型来提高供应链的效率和透明度。公司发起了一项全球计划,旨在通过EDI(电子数据交换)等先进技术实现采购及付款交易的完全自动化。这一举措不仅降低了成本、减少了错误,还提高了供应链的响应能力和可见性。例如,Flex与D公司的EDI项目合作就是其数字化转型的一个成功案例,展示了Flex在推动供应链自动化方面的决心和实力。

5. 环保与社会责任

Flex在快速发展的同时,也积极履行其环保和社会责任。公司遵循欧盟的RoHS和WEEE等环保指令,致力于在电子产品设计和制造过程中减少有害物质的使用,并推动电子废弃物的回收和处理。此外,Flex还通过专项拨款、财务捐助、自愿者行动等多种形式加大对全球社会的支援和投入力度,关注灾难赈济、医疗援助、教育、环保等领域。这些举措不仅提升了Flex的企业形象,也为其可持续发展奠定了坚实的基础。

ABI Electronics公司的发展小趣事

ABI Electronics公司深知研发实力是企业发展的核心竞争力。因此,公司不断加大对研发的投入,引进了一批高素质的研发人才,建立了完善的研发体系。通过与高校、科研机构等合作,ABI不断吸收新的技术和知识,推动产品的升级换代,保持了在行业内的技术领先地位。

C-MEDIA公司的发展小趣事

随着数字化时代的到来,C-MEDIA公司敏锐地捕捉到文化传媒市场的潜力。公司以法国主流电视台为传播平台,积极与中国主流媒体展开合作,成功开创了海外华人经营国际文化传媒的新模式。特别是在2014年,中国国务院新闻办独家授权C-MEDIA在欧洲播放中国影视数据库节目,这一举措极大地提升了公司在国际文化传媒领域的影响力。

百事通科技(BUDDIES)公司的发展小趣事

在快速发展的同时,百事通科技(BUDDIES)始终不忘履行社会责任。公司积极参与公益事业,为社会做出贡献。同时,公司还注重可持续发展,通过采用环保材料、推广节能技术等方式,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,还为公司的长期发展奠定了坚实的基础。

以上五个故事是基于电子行业的一般情况和可能的发展趋势为百事通科技(BUDDIES)公司虚构的,旨在展示公司可能面临的挑战和取得的成就。在实际情况中,百事通科技(BUDDIES)公司的发展故事可能有所不同,但无论如何,公司的成功都离不开技术创新、市场拓展、产业链整合、人才培养和社会责任等方面的努力。

宝乘(baocheng)公司的发展小趣事

面对未来电子行业的发展趋势,宝乘公司继续坚持创新驱动的发展战略。公司加大研发投入,不断推出具有创新性和前瞻性的产品。同时,宝乘还积极探索新的市场领域和应用场景,为公司的未来发展奠定坚实的基础。相信在不久的将来,宝乘公司将成为电子行业中的佼佼者,为社会的进步和发展做出更大的贡献。

请注意,这些故事是基于现有信息的推测,并不代表宝乘公司的真实历史。如果您需要更准确和详细的信息,建议直接联系宝乘公司或查阅相关报道和资料。

BERNSTEIN公司的发展小趣事

BERNSTEIN公司的历史可以追溯到Weimar时期,当时Bernstein兄弟在莱比锡创立了“Monopol”公司,专注于为电气建筑服务控制系统生产和制造低压产品。初创时期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,Bernstein兄弟凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列具有竞争力的产品,并逐渐在市场上站稳脚跟。

问答坊 | AI 解惑

TSB41

我想要四相四拍步进电机的相关资料,知道的,分享一下,谢谢!…

查看全部问答>

电源的合理运用

电源的合理运用电源的合理运用 1.接触电阻      当电源输出端与负载连接时,连线两端的良好接触很重要。在负载电流大的情况下,良好的接触尤其重要。由于接触不良而引起的数mΩ至十多mΩ的接触电阻和太长或太细的不合适连接 ...…

查看全部问答>

超高频射频识别系统的研究与标签设计

射频识别是一种非接触的自动识别新技术,它成功地实现了多目标的跟踪与识别,以非接触性、识别速度快、可以多卡识别等优于其他自动识别技术的特性受到广泛重视。 近年来,超高频频段射频识别系统应用的要求推动了超高频读写器和电子标签的研究和开 ...…

查看全部问答>

视频监控技术发展中看安防需要应用发展

随着时代的发展,以及用户对安全防范要求的日益提高,监控光端机在安防领域得到越来越广泛的运用,视频监控已成为一种普通的需求。下面就视频监控系统的构建和未来发展趋势展开探讨。互联网技术及应用的飞速发展影响到了视频监控领域,利用廉价的IP ...…

查看全部问答>

从事s3c6410开发的朋友进来签个名,方便以后大家交流

产品规格: 1.        处理器与内存 ?        CPU:S3C6410,主频667M ?        RAM:128M ?        FLASH:1Gbit ?        MicroSD卡 ...…

查看全部问答>

cadence视频教程(allegro)

本人有一套cadence(allegro)使用教程共7CD,包括cadence破解软件和内部视频讲义,(网上是下不来的,就是有也不完全)这份讲义很经典,声音和画面都非常清晰,是初学者不可多得的教程,您如果觉得看书比较慢和比较痛苦就看看视频教程吧,相信您能得 ...…

查看全部问答>

请问ST有大学计划吗?急~~~~

                                 ST有大学计划吗?想带学生用STM32做个PDA参加竞赛,不知道能否向ST大学计划申请几块样品?谢谢!…

查看全部问答>

接口4线的SWIM,仿真环境IAR,怎么查看寄存器的值

为什么我的程序在运行后,我查看寄存器的值都是0啊,看不到变化。 比如我查看寄存器PE_ODR的值,程序暂停后,我watch寄存器PE_ODR的值总是为0x00,而实际上我用示波器测的话,是0xaa,跟我设定的一样。 我想问一下,是不是用SWIM接口,只能 ...…

查看全部问答>

菜鸟问之一:LM3S811PWM产生的问题

#include    \"hw_types.h\"#include    \"hw_memmap.h\"#include    \"hw_ints.h\"#include    \"hw_gpio.h\"#include    \"hw_pwm.h\"#include    \ ...…

查看全部问答>