找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1503|回复: 0
打印 上一主题 下一主题
收起左侧

stm32的gpio口的介绍(交流和学习)

[复制链接]
跳转到指定楼层
楼主
ID:480680 发表于 2020-7-7 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       我最近在学stm32,想和大家分享自己的学习成果,也和大家一起学习交流。之前学习过15的库函数的套用,经过一段时间摸索,我对stm32的使用有了基础的了解。因为板子不是正点原子和野火,所以有些不同。      每个板子视频教学第一个介绍都是stm32的gipo口的介绍,这个io口跟51的io口定义全然不同,并且能配置自身频率,而且有些定义用到了结构体。而且stm32是32位的单片机,内部的32位寄存器太多,很难记住,所以建议使用库函数的办法,先学会套用,后来在更改参数或者做一些小项目的时候,对一些寄存器做一些更深入的理解。
     首先我们讲一下gipo口void led_init(void)
{  
   GPIO_InitTypeDef  GPIO_InitStructure;    //调用结构体

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);         //定义时钟
         
   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;                //定义哪个口输出

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //输出速率为50Mhz

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;             //定义为推挽输出
        
   GPIO_Init(GPIOG, &GPIO_InitStructure);                            //调用库函数配置io口

   GPIO_SetBits(GPIOG,GPIO_Pin_6);                                                //置一服务
}


   这个截图你能看见这个是定义一个stm32的io口的操作过程,这个地方使用了结构体,可以看到,这样使调用更加明了。这里定义了io的pa时钟,配置的是哪一个io口,输出速率,输出是推挽输出。这些参数,集合在一个函数中,使用更加明了简捷。感觉很方便。
   我提供一个灯亮小灯的程序。可以参考一下,有啥问题可以一起学习。我建了个群912803408.可以交流

单片机源程序如下:
  1. /*****
  2. ** Descriptions:配置PG6为输出,驱动开发板上的LED指示灯D1以200毫秒的间隔闪烁
  3. **--------------------------------------------------------------------------------------------*/
  4. #include "stm32f10x.h"
  5. //delay这里报错的原因是:delay函数用汇编实现的,导致了MDK误报。
  6. #include "delay.h"

  7. /***************************************************************************
  8. * 描  述 : 初始化单片机控制D1的引脚PG6,并将D1的初始状态设置为熄灭
  9. * 参  数 : 无
  10. * 返回值 : 无
  11. **************************************************************************/
  12. void led_init(void)
  13. {
  14.    //定义IO初始化配置结构体
  15.    GPIO_InitTypeDef  GPIO_InitStructure;
  16.    //打开PA端口时钟
  17.    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);         
  18.          
  19.          //配置的IO是PG6
  20.    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;               
  21.          //IO口速度为50MHz
  22.    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  23.    //配置为通用推挽输出
  24.    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  25.          //调用库函数GPIO_Init()配置IO
  26.    GPIO_Init(GPIOG, &GPIO_InitStructure);       
  27.    //设置D1初始化状态为熄灭       
  28.    GPIO_SetBits(GPIOG,GPIO_Pin_6);                                               
  29. }

  30. /***************************************************************************
  31. * 描  述 : 主函数
  32. * 参  数 : 无
  33. * 返回值 : 无
  34. **************************************************************************/
  35. int main(void)
  36. {
  37.   //初始化用于驱动指示灯D1的引脚PG6
  38.         led_init();       

  39.   //主循环       
  40.         while(1)
  41.         {
  42.                         //调用库函数GPIO_ResetBits()驱动LED指示灯D1的引脚(PG6)输出低电平,即点亮D1
  43.                   GPIO_ResetBits(GPIOG,GPIO_Pin_6);  
  44.                   //软件延时200ms
  45.                         sw_delay_ms(200);
  46.                   //调用库函数GPIO_SetBits()驱动LED指示灯D1的引脚(PG6)输出高电平,即熄灭D1
  47.                         GPIO_SetBits(GPIOG,GPIO_Pin_6);          
  48.                   //软件延时200ms
  49.                         sw_delay_ms(200);      
  50.         }
  51. }
  52. /********************************************END FILE********************/
复制代码

所有资料51hei提供下载:
led.7z (192.91 KB, 下载次数: 6)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表