打印
[STM32F0]

STM32入门学习之GPIO

[复制链接]
628|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include "stm32f0xx.h"
#include "stm32_lib/inc/stm32f0xx_rcc.h"
#include "stm32_lib/inc/stm32f0xx_gpio.h"

int main(void)
{
        //IOPAEN=1,使能GPIOA的时钟
        RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
        //设置IO口工作模式,GPIOA_MODER4=0x01,通用IO口
        GPIOA->MODER |= GPIO_MODER_MODER4_0;
        GPIOA->MODER &= ~GPIO_MODER_MODER4_1;
        //设置输出类型,GPIO_OTYPER_OT_4=1,推挽输出
        GPIOA->OTYPER &= ~GPIO_OTYPER_OT_4;
        //设置速率,GPIO_OSPEEDER_OSPEEDR4=0x01,中速,10MHz
        GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4_0;
        GPIOA->OSPEEDR &= GPIO_OSPEEDER_OSPEEDR4_1;
        //设置上下拉,GPIO_PUPDR_PUPDR4=0x00,无上拉,无下拉
        GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR4_0;
        GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR14_1;

        //GPIOA->BSRR |= GPIO_BSRR_BS_4;//输出高电平
        GPIOA->BSRR &= ~GPIO_BSRR_BS_4;//输出低电平

    while(1){}

}


沙发
wahahaheihei|  楼主 | 2016-10-11 14:49 | 只看该作者
首先,我们看,RCC->AHBENR是什么意思?

-> 很形象,箭头,指示的意思。

其实,这个RCC是一个指针,AHBENR是结构体成员

RCC->AHBENR 等同 RCC.AHBENR,大家可尝试在CooCox IDE中输入“RCC.",结果点会自动变成->

我们可以在stm32f0xx.h头文件中找到关于RCC结构体的定义

上面定义的是RCC_TypeDef,我们可以继续查看关于”RCC” 的定义,见STM32F0xx.h第791行。

知道了RCC,那RCC_BASE又是什么呢,见STM32F0xx.h第735行。


使用特权

评论回复
板凳
wahahaheihei|  楼主 | 2016-10-11 14:51 | 只看该作者

AHBPERIPH_BASE又是什么呢?

好了,一切真相大白,RCC->AHBENR,就是指寄存器地址。

我们看该寄存器到底有哪些东西,如下图所示,我们要配置GPIOA的时钟,只需要将IOPA置1即可。

方法很多,第一种就是纯粹的移位与或操作。

RCC->AHBENR |=(1<<17);

使用特权

评论回复
地板
wahahaheihei|  楼主 | 2016-10-11 14:51 | 只看该作者

另外一种方法,我们继续查看头文件stm32f0xx_rcc.h

查看stm32f0xx.h,这里就得到了IOPAEN的位置了,其宏定义为 RCC_AHBENR_GPIOAEN

如果要设置这个位的值为1,就直接用“或”   RCC->AHBENR |= RCC_AHBENR_GPIOAEN

如果要设置这个位的值为0,就先取反,再“与”   RCC->AHBENR &= ~RCC_AHBENR_GPIOAEN;

那其他GPIO的配置,也是如此。


使用特权

评论回复
5
mmuuss586| | 2016-10-11 17:02 | 只看该作者
谢谢分享;

使用特权

评论回复
6
wahahaheihei|  楼主 | 2016-10-11 18:29 | 只看该作者
看到不错的,我就转来了,好东西跟大家一起分享。

使用特权

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

本版积分规则

217

主题

3043

帖子

12

粉丝