STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(寄存器操作版)
2015-09-29 07:06
846 查看
依然,直接上代码
首先,我们看,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的配置,也是如此。
#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的配置,也是如此。
相关文章推荐
- 在mac系统安装Apache Tomcat的详细步骤
- javaWebSerivice学习篇4-WSDL文档结构图
- Eclipse上安装GIT插件EGit及使用
- 怎么在博客上积累代码量?
- 字符串遍历
- Math类---->System类---->Runtime类
- Principal Component Analysis(PCA)主成分分析
- .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)
- *LeetCode-Number of Islands
- *LeetCode-Minimum Size Subarray Sum
- javascript判断是否按回车键
- 排序
- Linux Objdump Command Examples (Disassemble a Binary File)
- Sudoku Solver
- 2015年十一假期笔记(一) LWP学习记
- 移动开发入门
- MySQL Workbench
- [转] Bash脚本:怎样一行行地读文件(最好和最坏的方法)
- multimap容器查找元素的三种方法总结
- 我想搞懂软工问题