datasheet

STM32入门之旅(第二天)-------开发环境搭建、库函数使用

2019-07-10来源: eefocus关键字:STM32  开发环境  库函数

一.如何学习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;

}


关键字:STM32  开发环境  库函数

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic467319.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32入门之旅(第三天)-------按键电路、时钟体系
下一篇:STM32入门之旅(第一天)-------stm32概述

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32解决:st-link连接下载程序的问题

STM32解决:Error: Flash Download failed - "Cortex-M3"本人由于使用普中科技的stm32 的开发板的 USB的下载的地方坏了,所以不得不使用arm仿真器 st-link 进行下载。鼓捣了半天下面总结一下几个问题:1、st-link的驱动下载首先你插上st-link的时候,电脑的设备管理器这个地方是有感叹号的,说明还没有装好驱动,所以我就在网上找啊找。终于根据:win8【笔者没这个系统,无法测试,请大家测试后报告】:http://pan.baidu.com/s/1sjJQxZn(转载来自:https://blog.csdn.net/imxiangzi/article
发表于 2019-07-19
STM32解决:st-link连接下载程序的问题

解决stm32f103通过stlink不能烧录程序问题

问题:   stm32(stm32f103c8T6)开发板只能通过串口烧录程序,而st—link居然不行描述:解决:st-link固件升级用stm32cubemx快速开发时没有配置好调试模式重新生成代码就可以了如果还是不行的话,就得升级一下stlink固件了,具体升级方法可百度
发表于 2019-07-19
解决stm32f103通过stlink不能烧录程序问题

STM32下载不成功问题汇总

在某宝上买了五个最小系统核心板是STM32F103C8T6的芯片,刚拿到手准备下载程序调试,上电后板子自带LED闪烁,这是商家自己下载的示例程序,说明芯片工作着,用KEIL4进行下载自己程序,把自己编译好的程序下载。用的JLINK的四线下载调试下载口,SW的调试接口,点击下载后发现擦除成功,下载失败,提示:Load "..\Output\STM32-DEMO.axf" Set JLink Project File to "F:文件RFID程序电机USERJLinkSettings.ini"* JLink Info: Device "STM32
发表于 2019-07-19
STM32下载不成功问题汇总

STM32高级开发(11)-使用GDB调试你的工程

/scripts/target/stm32f4x_stlink.cfg在执行完此条指令后该终端就会一直执行OpenOCD的程序了,不要关闭它,我们再打开一个终端界面,进入我们的工程目录,比如我这里进入的就是我的libopencm3样例工程下的blink子工程目录。$ cd '/home/yangliu/workspace/libopencm3-my-example/blink'然后我们使用指令输入调试文件并打开GDB程序。$ arm-none-eabi-gdb blink.elf 然后我们在GDB的指令界面中,输入连接指令,连接本地的3333端口。(gdb)target remote localhost:3333此时
发表于 2019-07-19
STM32高级开发(11)-使用GDB调试你的工程

STM32F4标准外设库模板工程建立与使用

SW4STM32安装其实固件库安装过程很简单,在第一次新建工程时会提示选择使用Stdperiph 驱动还是Cube HAL,由于Stm32官方大力推行Cube HAL固件库,所以Cube HAL的固件库直接可以从网上直接一键下载安装。然而对于老的StdPeriph固件库不能一键式下载安装,会提示出错。所以,我们需要自己下载一个.zip固件包,放在C:UsersLYAppDataRoamingAc6SW4STM32firmwares文件夹下,其中的LY就是计算机的用户名。然后新建工程时在选择Stdperiph固件时会自动解压缩,这样就能使用该库进行编译了。界面如下所示:工程配置器件与时钟或者,修改晶振与时钟,根据注释可以算得
发表于 2019-07-19
STM32F4标准外设库模板工程建立与使用

基于STM32的外设的GPIO外设设置总结

1、背景外设驱动的寄存器设置对于外设功能正常运行异常重要。现在对GPIO的配置进行总结。2、GPIO的配置总结复用GPIO配置GPIO设置为输出或者是复用模式时,需要设置输出速度;而无论设置为什么模式,都要对GPIO的内部上下拉进行设置。注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!
发表于 2019-07-19
基于STM32的外设的GPIO外设设置总结

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved