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

发布者:MysticJourney最新更新时间: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  开发环境  库函数 引用地址:STM32入门之旅(第二天)-------开发环境搭建、库函数使用

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

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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