STM32F103C8 GPIO输出设置

刚开始学习单片机STM32F103C8的使用,按行业惯例,肯定是资深点灯工程师要出场了。

所有对外设的操作,都可以分为以下三步:
1、打开外设对应的时钟;
2、设置端口用途;
3、对外设(对应寄存器)进行读写操作。
本示例中也是按照这个步骤进行操作的。

方法 1:直接操作寄存器
本程序中,使用对单片机寄存器的地址操作的方式进行编程。相较库函数的方法,这种方法虽然可读性差一些,但更容易理解底层是如何配置并工作的。

#include "stm32f10x.h"
int main(void)
{
	//第一步:打开时钟,通过RCC_APB2ENR寄存器,代码中RCC_BASE是RCC的基地址,0x18时APB2ENR的地址偏移量,下同
	//打开PORTB时钟
	*(unsigned int *)(RCC_BASE+0x18) |= 1<<3; 
	
	//第二步:配置端口用途,通过GPIOx_CRL和GPIOx_CRH寄存器
	//配置端口PORTB为推挽输出
	*(unsigned int *)(GPIOB_BASE+0x00) |= 0x33333333; 
	*(unsigned int *)(GPIOB_BASE+0x04) |= 0x33333333; 
	
	//第三步:输出高电平或低电平,通过GPIOx_ODR寄存器
	//控制PORTB ODR寄存器,本示例代码的效果为,输出PB0为低电平,其余PB1~PB15为高电平
	*(unsigned int *)(GPIOB_BASE+0x0C) =0xFFFE; 
	
	while(1);
}

方法2:使用固件函数库
如下为固件函数库程序版本。
函数库版本的优势是方便易读,厂家用很多函数对寄存器的操作做了封装。核心思想是,用程序的复杂换取人类阅读的方便。

#include "stm32f10x.h"
//采用STM官方提供的固件库进行GPIO的操作
int main(void)
{
	//第一步:打开PROTB时钟
	//RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB,ENABLE);//这是错的函数,耗费了好多时间
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	//第二步:配置端口用途,配置端口PORTB为推挽输出
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOB,&GPIO_InitStruct);//初始化
	
	//第三步:输出高电平或低电平
	//本示例代码的效果为,输出PB0为低电平,其余PB1~PB15为高电平
	GPIO_WriteBit(GPIOB,GPIO_Pin_All,1);
	GPIO_WriteBit(GPIOB,GPIO_Pin_0,0);
	//GPIO_Write(GPIOB,0xFFFE);	//这条指令可达到与上两条同样的效果
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值