打印
[应用相关]

STM32F103--(二) GPIO实践

[复制链接]
346|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
comparison|  楼主 | 2020-2-7 16:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件检测的工作很快完成了。接下来是开始调试一些程序了,对于调试一个新的MCU来说,最简单的也是最重要的自然是能够控制GPIO了。
    为了对MCU有个直观的了解,这里给出模块框图

使用特权

评论回复
沙发
comparison|  楼主 | 2020-2-7 16:16 | 只看该作者
1、GPIO模式的相关介绍:

    STM32的所有GPIO都可以设置成8中模式,主要的设置可以参考固件库的typedefine

/* Configuration Mode enumeration --------------------------------------------*/
typedef enum
{

    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,//复用功能的开漏输出模式
    GPIO_Mode_AF_PP = 0x18//复用功能的推挽输出模式

}GPIOMode_TypeDef;

使用特权

评论回复
板凳
comparison|  楼主 | 2020-2-7 16:16 | 只看该作者
2、GPIO初始化

   通过系统模块图可以发现,所有的GPIO都处于APB2通道上的。所以要使用GPIO必须对APB2进行的相关设置。主要设置如下:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能APB2中GPIOC的时钟

使用特权

评论回复
地板
comparison|  楼主 | 2020-2-7 16:16 | 只看该作者
   然后就可以进行GPIO的初始化了,这里引用了一个典型例程来解释。

void GPIO_Configuration(void)
{

  GPIO_InitTypeDef GPIO_InitStructure;//声明一个GPIO_InitTypeDef

  /* Enable the USART2 Pins Software Remapping */
  GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);//重映射管脚

  /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//指定初始化的引脚位
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//指定初始化GPIO的速度
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//设置GPIO的模式
  GPIO_Init(GPIOA, &GPIO_InitStructure);//利用GPIO_InitStructure来初始化GPIO

}

使用特权

评论回复
5
comparison|  楼主 | 2020-2-7 16:17 | 只看该作者
从上面的内容可以看出。主要的初始化步骤其实有两个。

   一个是填写GPIO_InitStructure中的内容

/* GPIO Init structure definition */
typedef struct
{

  u16 GPIO_Pin;
  GPIOSpeed_TypeDef GPIO_Speed;
  GPIOMode_TypeDef GPIO_Mode;

}GPIO_InitTypeDef;

使用特权

评论回复
6
comparison|  楼主 | 2020-2-7 16:17 | 只看该作者
然后是利用GPIO_Init(。。。)函数来初始化指定的GPIO。

   最后可以使用

       GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1);
       GPIO_ResetBits(GPIOC, GPIO_Pin_2 | GPIO_Pin_3);

来使GPIO置1或置0。

(其它更多操作,可以参考固件库说明手册)

使用特权

评论回复
7
xiaoqizi| | 2020-3-1 12:21 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
磨砂| | 2020-3-2 11:32 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
晓伍| | 2020-3-2 11:37 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
10
八层楼| | 2020-3-2 11:42 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
11
观海| | 2020-3-2 11:48 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
12
guanjiaer| | 2020-3-2 12:01 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
13
heimaojingzhang| | 2020-3-2 12:06 | 只看该作者
非常感谢楼主分享

使用特权

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

本版积分规则

25

主题

417

帖子

0

粉丝