依然,直接上代码
#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){}
}
首先,我们看,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行。
AHBPERIPH_BASE又是什么呢?
好了,一切真相大白,RCC->AHBENR,就是指寄存器地址。
我们看该寄存器到底有哪些东西,如下图所示,我们要配置GPIOA的时钟,只需要将IOPA置1即可。
方法很多,第一种就是纯粹的移位与或操作。
RCC->AHBENR |=(1<<17);
另外一种方法,我们继续查看头文件stm32f0xx_rcc.h
查看stm32f0xx.h,这里就得到了IOPAEN的位置了,其宏定义为 RCC_AHBENR_GPIOAEN
如果要设置这个位的值为1,就直接用“或” RCC->AHBENR |= RCC_AHBENR_GPIOAEN
如果要设置这个位的值为0,就先取反,再“与” RCC->AHBENR &= ~RCC_AHBENR_GPIOAEN;
那其他GPIO的配置,也是如此。
上一篇:STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(三)
下一篇:STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)
推荐阅读最新更新时间:2024-03-16 16:08