zoukankan      html  css  js  c++  java
  • 《SLAM机器人基础教程》第三章 单片机与STM32:GPIO实验及Keil软件使用WatchWindows进行Debug调试

    3.3节 GPIO实验及Keil软件使用WatchWindows进行Debug调试

    本节将学习STM32基本的GPIO读取操作,并通过该GPIO实验学习keil软件的使用。

    a.实验准备:碰撞开关/杜邦线,ST-Llink下载器,CHEAPX机器人控制板

    b.实验目的:读取STM32芯片的管脚电平

    c.相关知识点:

    STM32的I/O口有8种工作模式:

    GPIO_Mode_AIN = 0x0,//模拟输入,用于AD采集

    GPIO_Mode_IN_FLOATING = 0x04,//浮空输入,用于判断外接电平是高电平还是低电平的情形

    GPIO_Mode_IPD = 0x28,  // 下拉输入,用于判断外接电平是高电平的情形

    GPIO_Mode_IPU = 0x48, //上拉输入,用于判断外接电平是低电平的情形

    GPIO_Mode_Out_OD = 0x14, //开漏输出,需外接上拉电阻,用于多个输出并联的情形

    GPIO_Mode_Out_PP = 0x10, //推挽输出 ,内部电路直接驱动直接输出高、低电平,用于单独输出高低电平的情形

    GPIO_Mode_AF_OD = 0x1C, //复用开漏输出,用于开漏输出的复用IO情形

    GPIO_Mode_AF_PP = 0x18 // 复用推挽输出,用于推挽输出的复用IO情形

    建议同学们先大概了解该知识点,后续在实验中再具体领会。

    d.编程及运行

    (1)初始化芯片管脚PD8,位置如下图。步骤如下:打开对应GPIO口的时钟,再配置管脚模式。此为GPIO初始化的通用标准步骤,后续同学自己编程类似功能时,可参考该代码,把RCC_APB2Periph_GPIOD、GPIO_Pin_8、GPIO_Mode_IPU等改为实际所用的GPIO管脚及模式即可。

    void InitBumper(void)
    {
        GPIO_InitTypeDef GPIO_InitStruct;
        
        //H1 BUMP1 PD8
        //Config Clock 配置时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//打开GPIOD时钟
        
        //Config GPIO PD8 配置芯片管脚
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; 
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode GPIO模式:上拉输入模式
        GPIO_Init(GPIOD, &GPIO_InitStruct);       //传入结构GPIO_InitStruct,配置GPIOD
    }

    (2)使用库函数GPIO_ReadInputDataBit()读取芯片管脚电平,该函数具体使用方法如下:

    void BumperUpdate(void)
    {
      
        if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_8))   //读取GPIO PD8 电平
        _currBumperStatus=1; //高电平,_currBumperStatus=1
      else  
        _currBumperStatus=0; //低电平,_currBumperStatus=0
    }

    (3)编写主函数

    //GPIO 实验
    int main(void)
    {        
      InitBumper();    //初始化 BUMP1 PD8
        
        while(1)
        {
          BumperUpdate();//更新
        }
    }

    (4)编译,并使用ST-Link下载.硬件操作步骤如下:打开控制板开关;将控制板SWD接口的GND SWDIO SWCLK 分别连接ST-Link 的DIO CLK GND。软件操作查看上一节。

    (5)配置WatchWindows进行Debug调试。步骤如下:点击debug工具,点击WatchWindows,输入如下图中内容。

     (6)设置断点

     

     (7)运行程序。点击如下按钮,程序会一直运行,遇到设置了断点的语句行才会停止。如图,全局变量_currBumperStatus在程序未运行时,其值为初始化值 0。

    (8)通过观察watch windows中的全局变量_currBumperStatus的值,就可以知道PD8的电平。我们使用碰撞开关做实验,PD8与碰撞开关的输出口相连。当开关打开时,输出口为高电平;当开关闭合时,低电平。我们要检测碰撞开关的闭合情形(发生碰撞情形),所以在初始化时,使用GPIO_Mode_IPU 上拉输入模式,用于判断外接电平是低电平的情形。若同学们是使用杜邦线做实验,将PD8与VCC或GND相连即可达到同样给PD8输入高低电平的目的。

    (9)实验结果:碰撞开关打开,点击运行,运行到断点停止时,可以观察到全局变量_currBumperStatus的值为1;碰撞开关闭合(手不要松开),点击运行,运行到断点停止时,可以观察到全局变量_currBumperStatus的值为0。

    e.总结:watch windows可以观察STM32寄存器的值,以及全局变量值,是我们调试程序最有效手段。除此以外,我们后面还会学习使用串口打印的方法,输出我们要观察的值。

  • 相关阅读:
    5.对象的简化属性
    7.函数参数默认值
    python中argparse
    VC 6.0 打开文件出错
    【UNIX程序设计教程】 阅读初体验(1)
    引以为鉴ARM开发板连线注意事项
    windows xp宿主机 + Linux 虚拟机 网络配置
    Gcc编译选项分析
    ADS下调试出现的警告信息
    S3C2440串口通讯实现
  • 原文地址:https://www.cnblogs.com/Baron-Lu/p/13377778.html
Copyright © 2011-2022 走看看