查看: 12143|回复: 13

强仔教你玩stm32F401RE Nucleo之GPIO点灯

[复制链接]
  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-21 13:49:33 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 强仔00001 于 2014-8-21 14:14 编辑

           导读:全球领先的半导体供应商、全球领先的ARM® Cortex®-M微控制器厂商意法半导体(STMicroelectronics,简称ST)进一步强化STM32系列微控制器的易用性和设计灵活性,推出适用于STM32全系产品的经济型且易于扩展的原型开发板。STM32 Nucleo将易用性、灵活性、连接功能和主流工具资源兼容性完美地融合在一起,是当今的嵌入式开发人员的理想的开发平台。
                   Nulceo系类的开发板套件是ST公司今年新出的学习套件。Nucleo是意法半导体加入ARM embed项目后 的又一个风格系列板卡,有两个鲜明的特点:1.兼容ArduinoUNO R3 Shield扩展板、2. 支持ARM embed项目。或许有人会有疑问,什么是ARM embed项目?mbed是一个面向ARM Cortex-M系列处理器的原型开发平台,主要用于培育物联网(IoT)的协作项目,包括了免费的软件库(SDK),硬件参考设计(HDK)和在线工具 Web)三部分,为用户提供简单、方便快捷的基于ARM Cortex-M处理器的MCU开发、调试等操作。
        当我们拿到STM32F401 Nucleo开发板第一感觉就是“改变了”,变好看了,同样是STM32F系列板卡的包装,但是板卡不再是最常见的绿色PCB板,这是一块精致小巧的乳白 色板卡,让人过目不忘,在包装盒上板卡的特点介绍中我们还能看到特别标注的mbed-enabled功能。板卡后面那些SBX是可以用0欧姆电阻接上,进而开启一些别的功能。
    板卡的性能如下:
           STM32F401RET6微控制器,基于ARM Cortex-M4处理器,带DSP,最高支持84MHz主频
           支持ArduinoUNO R3 Shield扩展板,微控制器所有IO口引脚通过排针座引出
           ST-LINK/V2-1调试器,支持对外部微控制器调试
           3LED:一个USB通讯LED、一个电源LED、一个用户LED;两个机械按键:复位、用户
           USB接口的3个不同功能:虚拟串口、容量存储、调试接口
           3种不同供电方式:mini USB接口供电、IO引脚用电、通过Arduino UNO R3 Shield接口供电
           支持KeilIARembed在线IDE的设计工具
           STM32F401 Nucleo开发板包含了STM32F系列板卡惯有的机械按键、LED指示灯、miniUSB调试接口,众多IO口外设通过排针座引出等功能,除此之外,也有与众不同之处,如兼容Arduino Shield接口,并且可以通过ArduinoShield扩展接口给板卡供电,板卡搭载了STM32F401RET6核心微控制器,基于32位的高性能ARM Cortex-M4处理器,带FPU单元,最高能支持84MHz主频。
           现在我来分享一下,我开发中遇到的困难和学到的东西吧。在上次我出了篇用keil 5自带的st库建工程,这个教程我教大家怎样拿网上st库来建立自己的工程。我用库版本是V1.0的
           当我们拿到一个开发套件,我要选择它的编译环境了。我选择的keil 5.1的版本。可惜的是keil5以下的版本不支持stm32f401ret6这个型号。所以我要装keil5才能开发stm32f401 Nucleo。装好了编译器之后,就是装驱动了,这里我就不多说了,马上进入第一个工程的建立。
           安装完keil 5后,打开界面后如下图:
    安装完keil 5的图片.jpg
    第一次使用keil 5的朋友们要注意啦,芯片的支持包要在软件里自己进行下载。
    如下图用红色圈住的地方:
    keil 5芯片支持包下载的地方的图片.jpg
    keil 5A.jpg
    keil 5H.jpg
    keil 5C.jpg
    keil 5B.jpg
           右边是列举了keil5支持的芯片的种类,左边是一些芯片的官方例程。这个好处就是以后想参考官网的例程,可以直接在keil 5里下载了,这个功能方便了我们开发者。
           下载完stm32f4系列的支持包后,就可以建我们的第一个工程了,就从经典的点亮开发板的led开始吧。
    首先要新建工程,如下图;
    keil 5D.jpg
    点击完后会弹出要求你选择什么芯片。
    我们用的是stm32f401 Nucleo,芯片当然选择stm32F401RE
    keil 5F.jpg
         选好芯片之后,进入工程的前期配置了。如下图;我因为用的外部的库函数,是v1.0版本的,所以我这里就选了下面3个选项。下面我介绍其他选项的意思吧,
    Boad Support是一些stm32f40x系列开发套件的支持库。CMSISCOREDSP分别是cortex-m3dsp的支持库。Device是一些外设的库文件,Startup是启动文件,Startup的选项一定要勾上,否则你写的程序运行不了的,STM32F4xx_StdPeriph_Driverstm32f4系列的驱动库。Drivesstm32f4系列的驱动的API。其他的选项的功能大家可以自行进行研究,我这里就不多说了
    keil 5G.jpg
    选择好这三个选项后,就点击OK,这样我们的工程就添加了几个文件了,如下图:
    keil 5I.jpg
    接着我们进行后期的工程配置,首先在你的工程目录下新建一个USER的文件夹,然后在USER文件夹里新建一个main.c的文件和把stm32f4xx_conf.h的文件添加到USER文件夹,然后把STM32F4xx_StdPeriph_Driver的文件复制过来,STM32F4xx_StdPeriph_Driver的库文件大家可以自行在网上搜索下载。如下图:
    keil 5O.jpg keil 5K.jpg keil 5HH.jpg
    然后再点击keil 5的项目管理,新建两个文件,分别是USERLIB,再点击Add Files选项,分别把USER中的main.c文件和STM32F4xx_StdPeriph_Driver-->SRC文件夹中的c文件添加进来,步骤如下图:
    keil 5L.jpg keil 5M.jpg keil 5N.jpg keil 5P.jpg keil 5Q.jpg
    添加文件完后,要进行最关键的工程配置了,鼠标右击工程进入配置的选项面板,进入C/C++的选项里输入STM32F4XX,USE_STDPERIPH_DRIVER,这就是告诉编译器有用ST的库了,如stm32f4xx.h的头文件里有个条件编译。
    keil AQ.jpg
    stm32f4xx_conf.h文件是管理库文件的头文件是否加载的,如下图:
    keil QA.jpg
    然后要设置相关头文件的查找路径,编译器不会自动帮你找的,所以要你在工程设置里配置好路径,这样软件才会找到头文件并且把它编译。设置的步骤如下图:
    keil 5R.jpg keil 5S.jpg keil 5QQ.jpg keil 5T.jpg keil 5FF.jpg
    紧接着进入仿真器的选择和flash文件的选择了,板上集成了下载和仿真模块,是Stlinksw模式,设置步骤如下图:
    keil 5U.jpg keil 5V.jpg keil 5CA.jpg
    flash的配置:
    keil 5AA.jpg
    这里要把Use Debug Driver的选项勾掉才能进行flash的配置。这点大家要注意一下。
    keil 5W.jpg keil 5CC.jpg keil 5DD.jpg keil 5EE.jpg
    以上这些都设置好了,我们就在mian,c的文件添加如下图的代码:

    keil 5KK.jpg
    编译成功会有以下的信息出现。
    stm32f401的所有的外设都是挂在桥上的,要用那个模块,就要打开相应的时钟,如下截取stm32f4的参考手册中的图:
    keil 5NN.jpg
    keil 5MM.jpg
    现在我们的任务是点亮开发套件上的LED灯,LED是连接了芯片的PORTA的第5脚,如原理图:
    keil HU.jpg
    所以我们首要的任务是,对GPIOA5管脚的配置成推挽输出,IO口的速度是100M,无上下拉,然后打开GPIOA的时钟和初始化IO,用库函数的代码是:
    #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"
    voidLED_Initialize (void)
    {
      RCC->AHB1ENR |=  (1ul << 0);                  /* Enable GPIOA clock         */
      /* Configure LED (PA.5) pins as push-pulloutputs, 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();//
           }
          
    }
    下载后,按开发套件的黑色的复位键,不行就要按多几次吧。
    IMG_20140731_141925.jpg
    效果图:绿色的那盏灯被点亮了。


    stm32f401_GPIO.zip (335.81 KB, 下载次数: 110)
    keil 5E.jpg
    keil 5GG.jpg
    keil 5HW.jpg
    keil 5II.jpg
    keil 5J.jpg
    keil 5JJ.jpg
    keil 5QW.jpg
    keil 5TT.jpg
    keil 5WE.jpg
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-21 13:57:01 | 显示全部楼层
    强仔,强帖!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-8-21 14:16:04 | 显示全部楼层
    奋斗哥 发表于 2014-8-21 13:57
    强仔,强帖!!!

    谢谢,对大家有帮助就行了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-10-31 10:17
  • 签到天数: 447 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-8-21 14:30:51 | 显示全部楼层
    very good!学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-21 21:24:06 | 显示全部楼层
    学习学习,多谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-8-5 08:38
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-8-21 21:25:08 | 显示全部楼层
    楼主帖子工程浩大啊,必须支持!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-8-22 12:52:24 | 显示全部楼层
    jameswang 发表于 2014-8-21 21:25
    楼主帖子工程浩大啊,必须支持!!!

    后续还会有,对大家有帮助就不怕麻烦了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-8-22 12:53:00 | 显示全部楼层
    haothree_300060 发表于 2014-8-21 21:24
    学习学习,多谢分享

    后续还有
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-8-15 09:30
  • 签到天数: 162 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-8-25 16:38:37 | 显示全部楼层
    强仔00001 发表于 2014-8-22 12:53
    后续还有

    继续期待!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-5 14:38
  • 签到天数: 175 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2014-8-26 22:57:08 | 显示全部楼层
    haothree 发表于 2014-8-25 16:38
    继续期待!!!

    谢谢支持
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-25 00:11 , Processed in 0.208294 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.