打印
[STM32F7]

【NUCLEO_F767ZI】开发入门之GPIO操作

[复制链接]
1018|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Larm1|  楼主 | 2016-8-5 13:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Larm1 于 2016-8-5 14:00 编辑

      虽然STM32的芯片使用了不少,从F030、103、105、205、207、407等都有使用过,但是NUCLEO开发板是第一次使用。NUCLEO开发板的设计初衷是简单、低成本、易用及用扩展等。
      对于NUCLEO_F767ZI板子的硬件相关介绍这里不再描述,某娘一下很多,下面简单介绍一下入门级别的开发。
      前期准备工作(以MDK为例):          1.   下载并安装MDK_5.10及以上版本;如果之前已安装,请确认已经下载了STM32F7 系列的开发包,见下图:
   
   2.  下载并安装ST_Link/V2-1   
   3.  St的官网上下载F7系列的软件包en.stm32cubef7.zip,该软件包包含了多个F7系列的MCU及相关的外设示例和常用的示例。
   准备工作结束。




   入门调试:
      该部分描述了基于NUCLEO_F767ZI开发板的GPIO操作。
      1.  使用一根手机数据线连接PC和开发板,见下图:
   
   2. 开发板第一次与电脑连接时,会出现安装驱动的,按照安装驱动的方式正常安装即可。
   一旦与电脑成功连接之后,开发板电源PWR、通讯COM灯常亮,LD110Hz的频率闪烁,指示灯位置如下:   
   3. 解压缩下载的F7系列软件包en.stm32cubef7.zip
   4. 双击目录:STM32Cube_FW_F7_V1.4.0\Projects\STM32F767ZI-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM\下的工程文件 Project.uvprojx ,打开GPIO示例程序,此时工程结构框架已经完全可以正常使用;
      重新编译下载并运行程序,现象时LD1指示灯以10Hz频率闪烁;
   5. 增加如下功能,LD2指示灯与LD1一同闪烁,按下USER按键时LD3亮,否则LD3灭,相关硬件原理图如下:   
   
      PS:上图中的LD1最终是由一个运放电路驱动,猜测应该是可以通过DA或其他方式输出不同的电压以调节LD1的亮度,实现调光功能。


   6. 从以上原理图可以看出,三个指示灯和一个按键的锡桥分别是:SB120SB139SB118SB173,原图图中标记为“close”,结合开发板一看,所有的锡桥已经用0欧姆的电阻短接,见下图:
   
   7.  程序修改如下:
       intmain(void)
{
  HAL_Init();

  /* Configure the system clock to 216 MHz */
  SystemClock_Config();

  /* -1- Enable GPIO Clock (to be able toprogram the configuration registers) */
  __HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();

  /* -2- Configure IO in output push-pull modeto drive external LEDs */
  GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull  = GPIO_PULLUP;
  GPIO_InitStruct.Speed =GPIO_SPEED_FREQ_VERY_HIGH;

  GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_7| GPIO_PIN_14;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

//// USER KEY
  GPIO_InitStruct.Mode  = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull  = GPIO_NOPULL;
  GPIO_InitStruct.Speed =GPIO_SPEED_FREQ_MEDIUM;

  GPIO_InitStruct.Pin = GPIO_PIN_13;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  /* -3- Toggle IO in an infinite loop */
  while (1)
  {
    HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
           HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_7);

           if (GPIO_PIN_SET ==HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13))
           {
                    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_SET);
           }
           else
           {
                    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14, GPIO_PIN_RESET);
           }

    /* Insert delay 100 ms */
    HAL_Delay(100);
  }
}

结论:
1.      程序下载运行工程演示正常;
2.   开发板确实简单、易上手。


本帖的操作对熟悉MDK开发环境的读者看起来比较顺手。


沙发
Larm1|  楼主 | 2016-8-5 14:01 | 只看该作者
自己先顶起来...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:大爱无疆

53

主题

389

帖子

0

粉丝