这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 强仔教你玩 stm32F401RE Nucleo

共11条 1/2 1 2 跳转至

强仔教你玩 stm32F401RE Nucleo

菜鸟
2014-08-02 12:15:09     打赏

      导读:全球领先的半导体供应商、全球领先的ARM® Cortex®-M微控制器厂商意法半导体(STMicroelectronics,简称ST)进一步强化STM32系列微控制器的易用性和设计灵活性,推出适用于STM32全系产品的经济型且易于扩展的原型开发板。STM32 Nucleo将易用性、灵活性、连接功能和主流工具资源兼容性完美地融合在一起,是当今的嵌入式开发人员的理想的开发平台。

使用的硬件:

开发板名:stm32 Nucleo-F401RE

下载:mini-USB数据线


     Nulceo系类的开发板套件是ST公司今年新出的学习套件。Nucleo是意法半导体加入ARM embed项目后 的又一个风格系列板卡,有两个鲜明的特点:1.兼容Arduino UNO R3 Shield扩展板、2. 支持ARM embed项目。或许有人会有疑问,什么是ARM embed项目?mbed是一个面向ARM Cortex-M系列处理器的原型开发平台,主要用于培育物联网(IoT)的协作项目,包括了免费的软件库(SDK),硬件参考设计(HDK)和在线工具 (Web)三部分,为用户提供简单、方便快捷的基于ARM Cortex-M处理器的MCU开发、调试等操作。

我有幸得到两块stm32F401 Nucleo的套件。首先先上图:

板子

板子的背面


    拿到STM32F401 Nucleo开发板第一感觉就是“改变了”,变好看了,同样是STM32F系列板卡的包装,但是板卡不再是最常见的绿色PCB板,这是一块精致小巧的乳白 色板卡,让人过目不忘,在包装盒上板卡的特点介绍中我们还能看到特别标注的mbed-enabled功能。板卡后面那些SBX是可以用0欧姆电阻接上,进而开启一些别的功能。

板卡的性能如下:

       STM32F401RET6微控制器,基于ARM Cortex-M4处理器,带DSP,最高支持84MHz主频

       支持Arduino UNO R3 Shield扩展板,微控制器所有IO口引脚通过排针座引出

ST-LINK/V2-1调试器,支持对外部微控制器调试

3个LED:一个USB通讯LED、一个电源LED、一个用户LED;两个机械按键:复位、用户

       USB接口的3个不同功能:虚拟串口、容量存储、调试接口

3种不同供电方式:mini USB接口供电、IO引脚用电、通过Arduino UNO R3 Shield接口供电

       支持Keil、IAR、embed在线IDE的设计工具

STM32F401 Nucleo开发板包含了STM32F系列板卡惯有的机械按键、LED指示灯、mini USB调试接口,众多IO口外设通过排针座引出等功能,除此之外,也有与众不同之处,如兼容Arduino Shield接口,并且可以通过Arduino Shield扩展接口给板卡供电,板卡搭载了STM32F401RET6核心微控制器,基于32位的高性能ARM Cortex-M4处理器,带FPU单元,最高能支持84MHz主频。

       现在我来分享一下,我开发中遇到的困难和学到的东西吧。

       当我们拿到一个开发套件,我要选择它的编译环境了。我选择的keil 5.1的版本。可惜的是keil 5以下的版本不支持stm32f401ret6这个型号。所以我要装keil 5才能开发stm32f401 Nucleo。装好了编译器之后,就是装驱动了,这里我就不多说了,马上进入第一个工程的建立。

       安装完keil 5后,打开界面后如下图:

装完keil 5打开的界面



    第一次使用keil 5的朋友们要注意啦,芯片的支持包要在软件里自己进行下载。

如下图用红色圈住的地方:

芯片支持下载的地方

1


2


    右边是列举了keil 5支持的芯片的种类,左边是一些芯片的官方例程。这个好处就是以后想参考官网的例程,可以直接在keil 5里下载了,这个功能方便了我们开发者。

       下载完stm32f4系列的支持包后,就可以建我们的第一个工程了,就从经典的点亮开发板的led开始吧。

首先要新建工程,如下图;

4

5



    选好芯片之后,进入工程的前期配置了。如下图;我因为用的外部的库函数,是v1.0版本的,所以我这里就选了下面3个选项。下面我介绍其他选项的意思吧,

Boad Support是一些stm32f40x系列开发套件的支持库。CMSIS的CORE和DSP分别是cortex-m3和dsp的支持库。Device是一些外设的库文件,Startup是启动文件,Startup的选项一定要勾上,否则你写的程序运行不了的,STM32F4xx_StdPeriph_Driver是stm32f4系列的驱动库。Drives是stm32f4系列的驱动的API。其他的选项的功能大家可以自行进行研究,我这里就不多说了。

6


    选择好这三个选项后,就点击OK,这样我们的工程就添加了几个文件了,如下图:

7


    接着我们进行后期的工程配置,首先在你的工程目录下新建一个USER的文件夹,然后在USER文件夹里新建一个main.c的文件和把stm32f4xx_conf.h的文件添加到USER文件夹,然后把STM32F4xx_StdPeriph_Driver的文件复制过来,STM32F4xx_StdPeriph_Driver的库文件大家可以自行在网上搜索下载。如下图:


8    然后再点击keil 5的项目管理,新建两个文件,分别是USER和LIB,再点击Add Files选项,分别把USER中的main.c文件和STM32F4xx_StdPeriph_Driver-->SRC文件夹中的c文件添加进来,步骤如下图:

8

9

10

a

b


    添加文件完后,要进行最关键的工程配置了,鼠标右击工程进入配置的选项面板,进入C/C++的选项里输入STM32F4XX,USE_STDPERIPH_DRIVER,这就是告诉编译器有用ST的库了,如stm32f4xx.h的头文件里有个条件编译。

c

stm32f4xx_conf.h文件是管理库文件的头文件是否加载的,如下图:

d



    然后要设置相关头文件的查找路径,编译器不会自动帮你找的,所以要你在工程设置里配置好路径,这样软件才会找到头文件并且把它编译。设置的步骤如下图:

e


ff

ff

ww


    紧接着进入仿真器的选择和flash文件的选择了,板上集成了下载和仿真模块,是Stlink的sw模式,设置步骤如下图:

asss


xd


    这里要把Use Debug Driver的选项勾掉才能进行flash的配置。这点大家要注意一下。

vf


fr


以上这些都设置好了,我们就在mian,c的文件添加如下图的代码:

oo



编译成功会有以下的信息出现。

stm32f401的所有的外设都是挂在桥上的,要用那个模块,就要打开相应的时钟,如下截取stm32f4的参考手册中的图:

sa

现在我们的任务是点亮开发套件上的LED灯,LED是连接了芯片的PORTA的第5脚,如原理图:

hgfhgf



#include "stm32f4xx.h"

void GPIO_Iint()
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
}

int main()
{
	
	GPIO_Iint();
	GPIO_ResetBits(GPIOA,GPIO_Pin_5);
	
	while(1)
	{
		
		
		GPIO_SetBits(GPIOA,GPIO_Pin_5);
	}

	
}


寄存器版的相关配置代码:


#include "stm32f4xx.h"

void LED_Initialize (void) 
{

  RCC->AHB1ENR |=  (1ul << 0);                  /* Enable GPIOA clock         */

  /* Configure LED (PA.5) pins as push-pull outputs, No pull-up, pull-down */
  GPIOA->MODER   &= ~((3ul << 2*5));
  GPIOA->MODER   |=  ((1ul << 2*5));
  GPIOA->OTYPER  &= ~((1ul <<   5));
  GPIOA->OSPEEDR &= ~((3ul << 2*5));
  GPIOA->OSPEEDR |=  ((1ul << 2*5));
  GPIOA->PUPDR   &= ~((3ul << 2*5));
}

void LED_On() 
{


    GPIOA->BSRRL |= 1ul << 5;

}


int main()
{
	LED_Initialize();//
//	GPIO_Iint();
//	GPIO_ResetBits(GPIOA,GPIO_Pin_5);
	
	while(1)
	{
		
		
//		GPIO_SetBits(GPIOA,GPIO_Pin_5);
		LED_On();//
	}

	
} 


下载后,按开发套件的黑色的复位键,不行就要按多几次吧。


dc




大家想要更深入的了解GPIO可以自己看官方英文的手册。

stm32f401_GPIO.zip

作者简介

论坛名:强仔00001

自我介绍:我是五邑大学信息学院通信工程的本科二年级在读,喜欢研究硬件电路、软件编程。

能熟练运用Altium designer 09 ,会pads 9.5和candence 16.6。开发过TI的MSP430和C2000,freescale的K60,ST等公司的芯片,对 软件和硬件有很大的兴趣。希望能多认识一些有共同兴趣的朋友。

QQ:963775289





关键词: stm32f401 Nucleo     GPIO    

高工
2014-08-02 12:31:06     打赏
2楼
511版本的软件确实很不错,不过我现在觉得还是MPLAB x IDE好用,不好的是,这个是Microchip的开发环境,要是MDK和IAR借签一些功能就好了

菜鸟
2014-08-02 15:04:32     打赏
3楼

你有搞过PIC32MZ的吗??你有搞过PIC32MZ硬件的I2C吗???我现在搞到I2C这里,你有好的例程吗


菜鸟
2014-10-11 13:00:39     打赏
4楼
谢谢强仔,学习一下

高工
2014-12-26 20:43:17     打赏
5楼

楼主,按你的做了,出现这么多错误

Rebuild target 'Target 1'
compiling main.c...
compiling main.c...
compiling main.c...
compiling misc.c...
STM32F4xx_StdPeriph_Driver\src\misc.c(76): error:  #5: cannot open source input file "misc.h": No such file or directory
  #include "misc.h"
STM32F4xx_StdPeriph_Driver\src\misc.c: 0 warnings, 1 error
compiling stm32f4xx_adc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c(106): error:  #5: cannot open source input file "stm32f4xx_adc.h": No such file or directory
  #include "stm32f4xx_adc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c: 0 warnings, 1 error
compiling stm32f4xx_can.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c(84): error:  #5: cannot open source input file "stm32f4xx_can.h": No such file or directory
  #include "stm32f4xx_can.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c: 0 warnings, 1 error
compiling stm32f4xx_crc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c(29): error:  #5: cannot open source input file "stm32f4xx_crc.h": No such file or directory
  #include "stm32f4xx_crc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c: 0 warnings, 1 error
compiling stm32f4xx_cryp.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c(164): error:  #5: cannot open source input file "stm32f4xx_cryp.h": No such file or directory
  #include "stm32f4xx_cryp.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c: 0 warnings, 1 error
compiling stm32f4xx_cryp_aes.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c(55): error:  #5: cannot open source input file "stm32f4xx_cryp.h": No such file or directory
  #include "stm32f4xx_cryp.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c: 0 warnings, 1 error
compiling stm32f4xx_cryp_des.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c(48): error:  #5: cannot open source input file "stm32f4xx_cryp.h": No such file or directory
  #include "stm32f4xx_cryp.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c: 0 warnings, 1 error
compiling stm32f4xx_cryp_tdes.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c(48): error:  #5: cannot open source input file "stm32f4xx_cryp.h": No such file or directory
  #include "stm32f4xx_cryp.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c: 0 warnings, 1 error
compiling stm32f4xx_dac.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c(131): error:  #5: cannot open source input file "stm32f4xx_dac.h": No such file or directory
  #include "stm32f4xx_dac.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c: 0 warnings, 1 error
compiling stm32f4xx_dbgmcu.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c(29): error:  #5: cannot open source input file "stm32f4xx_dbgmcu.h": No such file or directory
  #include "stm32f4xx_dbgmcu.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c: 0 warnings, 1 error
compiling stm32f4xx_dcmi.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c(86): error:  #5: cannot open source input file "stm32f4xx_dcmi.h": No such file or directory
  #include "stm32f4xx_dcmi.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c: 0 warnings, 1 error
compiling stm32f4xx_dma2d.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma2d.c(58): error:  #5: cannot open source input file "stm32f4xx_dma2d.h": No such file or directory
  #include "stm32f4xx_dma2d.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma2d.c: 0 warnings, 1 error
compiling stm32f4xx_dma.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c(124): error:  #5: cannot open source input file "stm32f4xx_dma.h": No such file or directory
  #include "stm32f4xx_dma.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c: 0 warnings, 1 error
compiling stm32f4xx_exti.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c(67): error:  #5: cannot open source input file "stm32f4xx_exti.h": No such file or directory
  #include "stm32f4xx_exti.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c: 0 warnings, 1 error
compiling stm32f4xx_flash.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c(72): error:  #5: cannot open source input file "stm32f4xx_flash.h": No such file or directory
  #include "stm32f4xx_flash.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c: 0 warnings, 1 error
compiling stm32f4xx_flash_ramfunc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash_ramfunc.c(58): error:  #5: cannot open source input file "stm32f4xx_flash_ramfunc.h": No such file or directory
  #include "stm32f4xx_flash_ramfunc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash_ramfunc.c: 0 warnings, 1 error
compiling stm32f4xx_fmc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fmc.c(36): error:  #5: cannot open source input file "stm32f4xx_fmc.h": No such file or directory
  #include "stm32f4xx_fmc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fmc.c: 0 warnings, 1 error
compiling stm32f4xx_fsmc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c(35): error:  #5: cannot open source input file "stm32f4xx_fsmc.h": No such file or directory
  #include "stm32f4xx_fsmc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c: 0 warnings, 1 error
compiling stm32f4xx_gpio.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c(84): error:  #5: cannot open source input file "stm32f4xx_gpio.h": No such file or directory
  #include "stm32f4xx_gpio.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c: 0 warnings, 1 error
compiling stm32f4xx_hash.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c(123): error:  #5: cannot open source input file "stm32f4xx_hash.h": No such file or directory
  #include "stm32f4xx_hash.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c: 0 warnings, 1 error
compiling stm32f4xx_hash_md5.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c(47): error:  #5: cannot open source input file "stm32f4xx_hash.h": No such file or directory
  #include "stm32f4xx_hash.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c: 0 warnings, 1 error
compiling stm32f4xx_hash_sha1.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c(47): error:  #5: cannot open source input file "stm32f4xx_hash.h": No such file or directory
  #include "stm32f4xx_hash.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c: 0 warnings, 1 error
compiling stm32f4xx_i2c.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c(92): error:  #5: cannot open source input file "stm32f4xx_i2c.h": No such file or directory
  #include "stm32f4xx_i2c.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c: 0 warnings, 1 error
compiling stm32f4xx_iwdg.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c(85): error:  #5: cannot open source input file "stm32f4xx_iwdg.h": No such file or directory
  #include "stm32f4xx_iwdg.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c: 0 warnings, 1 error
compiling stm32f4xx_ltdc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_ltdc.c(76): error:  #5: cannot open source input file "stm32f4xx_ltdc.h": No such file or directory
  #include "stm32f4xx_ltdc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_ltdc.c: 0 warnings, 1 error
compiling stm32f4xx_pwr.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c(38): error:  #5: cannot open source input file "stm32f4xx_pwr.h": No such file or directory
  #include "stm32f4xx_pwr.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c: 0 warnings, 1 error
compiling stm32f4xx_rcc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c(59): error:  #5: cannot open source input file "stm32f4xx_rcc.h": No such file or directory
  #include "stm32f4xx_rcc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c: 0 warnings, 1 error
compiling stm32f4xx_rng.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c(56): error:  #5: cannot open source input file "stm32f4xx_rng.h": No such file or directory
  #include "stm32f4xx_rng.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c: 0 warnings, 1 error
compiling stm32f4xx_rtc.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c(285): error:  #5: cannot open source input file "stm32f4xx_rtc.h": No such file or directory
  #include "stm32f4xx_rtc.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c: 0 warnings, 1 error
compiling stm32f4xx_sai.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sai.c(126): error:  #5: cannot open source input file "stm32f4xx_sai.h": No such file or directory
  #include "stm32f4xx_sai.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sai.c: 0 warnings, 1 error
compiling stm32f4xx_sdio.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c(156): error:  #5: cannot open source input file "stm32f4xx_sdio.h": No such file or directory
  #include "stm32f4xx_sdio.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c: 0 warnings, 1 error
compiling stm32f4xx_spi.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c(159): error:  #5: cannot open source input file "stm32f4xx_spi.h": No such file or directory
  #include "stm32f4xx_spi.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c: 0 warnings, 1 error
compiling stm32f4xx_syscfg.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c(50): error:  #5: cannot open source input file "stm32f4xx_syscfg.h": No such file or directory
  #include "stm32f4xx_syscfg.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c: 0 warnings, 1 error
compiling stm32f4xx_tim.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c(119): error:  #5: cannot open source input file "stm32f4xx_tim.h": No such file or directory
  #include "stm32f4xx_tim.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c: 0 warnings, 1 error
compiling stm32f4xx_usart.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c(92): error:  #5: cannot open source input file "stm32f4xx_usart.h": No such file or directory
  #include "stm32f4xx_usart.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c: 0 warnings, 1 error
compiling stm32f4xx_wwdg.c...
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c(84): error:  #5: cannot open source input file "stm32f4xx_wwdg.h": No such file or directory
  #include "stm32f4xx_wwdg.h"
STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c: 0 warnings, 1 error
assembling startup_stm32f401xe.s...
compiling system_stm32f4xx.c...
".\Objects\LED.axf" - 36 Error(s), 0 Warning(s).
Target not created.

 


高工
2014-12-26 23:10:24     打赏
6楼
太详细了

专家
2014-12-26 23:43:10     打赏
7楼
很详细,谢谢楼主分享

菜鸟
2014-12-29 15:12:38     打赏
8楼
头文件的路径还没有指定h好吧

菜鸟
2014-12-29 15:13:02     打赏
9楼
谢谢支持

菜鸟
2014-12-29 15:13:33     打赏
10楼
谢谢支持

共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]