STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)

发布者:创新之星最新更新时间:2018-07-09 来源: eefocus关键字:STM32  GPIO  STM32F030F4P6  CooCox  IDE 手机看文章 扫描二维码
随时随地手机看文章

依然,直接上代码


#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入门学习之GPIO(STM32F030F4P6基于CooCox IDE)

上一篇:STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(三)
下一篇:STM32入门学习之USART(STM32F030F4P6基于CooCox IDE)

推荐阅读最新更新时间:2024-03-16 16:08

STM32L--GPIO
1. 每个GPIO均有以下寄存器: 4个32位配置寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR GPIOx_MODER :配置IO端口方向为输入/输出/AF/模拟 GPIOx_OTYPER :选择输出类型:推挽/开漏 GPIOx_OSPEEDR :选择IO速度(与IO端口方向无关) GPIOx_PUPDR :选择上拉/下拉电阻(与IO端口方向无关) 2个32位数据寄存器:GPIOx_IDR、GPIOx_ODR 1个32位置位/复位寄存器:GPIOx_BSRR(使用该寄存器读写寄存器可以避免在读写期间被IRQ中断,该读写操作属于一个原子操作) 该寄存器
[单片机]
STM32L--<font color='red'>GPIO</font>
Stm32调试之assert_param() 断言机制
void TIM_DeInit(TIM_TypeDef* TIMx) { /* Check the parameters */ assert_param(IS_TIM_ALL_PERIPH(TIMx)); if (TIMx == TIM1) { RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, ENABLE); RCC_APB2PeriphResetCmd(RCC_APB2Periph_TIM1, DISABLE); } } 这段代码是Stm32固件库中的,IS_TIM_ALL_PERIPH(TIMx)这个函数的原形是判断TIMx是否等于TIM1-TI
[单片机]
STM32串口通信——16进制数形式
一.为什么采用16进制数形式? 首先,需要解释一下串口发送的数据都是unsigned char类型的,说成字符和16进制形式,只是我们采用何种方式展示这些数据。字符形式就是把16进制数通过ASCII表一个一个转成字符的。 一开始接触到的串口程序,就是字符形式的,尤其是STM32中被重构的printf()函数,我就先入为主地选择了字符形式。这样比较人性化,因为啥数据都是平时看到的字符,很直观,但是大大降低了通信效率!比如要发送一个数85,字符形式需要发送’8’+‘5’,而16进制只需要发送0x55。还有一点是负数,字符形式多加了一个’-'号,16进制直接发送有符号数就行了。如果要传输大量的数据,应该采用16进制形式。
[单片机]
一种基于STM32的高精度程控电流源设计
简介:为应对市场需求;本文设计了输出电流为0~5A;最大功率为100W的高精度程控电流源;主要技术指标为:电流源工作电压220V/50Hz;输出电流范围0~5A连续可调; 低纹波、高精度电流源是一种重要的仪器设备;广泛应用于电光源、电化学、通信、测量技术、电子仪器等领域。目前,市场上的电流源不具备连续可调功能;并且输出电流范围小、精度低、纹波大、价格昂贵;为应对市场需求;本文设计了输出电流为0~5A;最大功率为100W的高精度程控电流源;主要技术指标为:电流源工作电压220V/50Hz;输出电流范围0~5A连续可调;线路调整率《0。05%+0。1MA;负载调整率《0。05%+1MA;设准确度≪0。05%+2MA;回读准确度《0
[单片机]
一种基于<font color='red'>STM32</font>的高精度程控电流源设计
MSP430集成开发环境之IAR
MSP430集成环境之IAR System IAR是全球领先的嵌入式系统开发工具和服务的供应商。公司成立于1983年,迄今已有27年,提供的产品和服务涉及到嵌入式系统的设计、开发和测试的每一个阶段,包括:带有C/C++编译器和调试器的集成开发环境(IDE)、实时操作系统和中间件、开发套件、硬件仿真器以及状态机建模工具。 公司总部在北欧的瑞典,在美国、日本、英国、德国、比利时、巴西和中国设有分公司。它最著名的产品是C编译器-IAR Embedded Workbench, 支持众多知名半导体公司的微处理器。许多全球著名的公司都在使用IAR SYSTEMS提供的开发工具,用以开发他们的前沿产品,从消费电子、工业控制、汽车应用、医疗、
[单片机]
MSP430<font color='red'>集成开发环境</font>之IAR
STM32 嵌入式学习入门(0)——C语言基础复习
摘要 主要介绍了嵌入式编程中几个常用,但软件编程中用得不是很多的C语言知识。包括位操作、条件编译、结构体和结构体指针、typedef声明类型、以及extern变量声明、static关键字等内容。 本文并没有将相关C语言知识点介绍地很详细,毕竟这么多知识点要想掌握绝对不是看几篇文档就能掌握的。因此博主建议,如果上述的C语言知识掌握得还不是很好的话,找一本C语言的书好好研究研究。尤其是结构体和结构体指针、还有函数的知识(本文没提到),一定要很熟练。 本文除了简要介绍C语言知识,也结合博主自己的感受简单谈了各个知识点用在了嵌入式编程的什么地方,有不详细和描述不准确的地方欢迎大家留言讨论。 要想学习STM32,C语言的基础
[单片机]
<font color='red'>STM32</font> 嵌入式学习入门(0)——C语言基础复习
STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决
在网上搜了下,发现有很多这样的问题,我也遇到了,最后解决了,我在此总结一下: 问题1(与编译软件无关):在程序中加入printf语句实现串口输出,但未写重定向函数fputc,出现编译无任何警号和错误直接下载无法运行,软件仿真可以运行至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”处无法继续运行。 解决办法:编写fputc函数如下: 1 int fputc(int ch, FILE *f) 2 { 3           USART_SendData(USART1, (uint8_t) ch); 4         while (USART_GetFl
[单片机]
stm32烧录的程序为什么会丢失呢
第一次用stm32烧录程序的时候还是很正常的,但没过多久,我又按照以前的步骤再去烧录程序,发现stm32一但按复位,就会莫名其妙的消失,这是怎么回事啊? 小编最近看到有网友在疑惑stm32烧录的程序为什么会丢失呢?在此,小编将给大家分析一下stm32烧录程序丢失的原因。 首先,你要弄清楚自己的在线烧录是通过什么方法烧录的,只有先搞明白这个问题,你才好对症下药。 1、检查一下是不是光盘的质量或者是刻录软件出了问题。毕竟这个问题说大不大,说小不小,还是会影响到stm32烧录程序的。质量好一点的光盘是能够保证程序的稳定运行的。 2、如果你的程序烧写在flash中,那么stm32烧录的程序遇到复位或者掉电是都不会消失的。 3、stm3
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved