构建库函数雏形(第1节)—寄存器结构体定义点亮GoKit v2.1开发套件LED2和LED4

本文提供了一个STM32F10x系列微控制器中GPIO配置的具体实例代码,包括了如何开启GPIOB时钟、设置GPIOB的模式,并通过修改ODR寄存器来控制输出状态。代码详细展示了两种不同配置方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序代码如下:

#include "stm32f10x.h"



int main (void)
{
#if 0
// 开GPIOB端口时钟
RCC_APB2ENR  |=  ( (1) << 3 );

// 配置IO口为通用推免输出模式
GPIOB->CRH &=  ~( (0xf0000000) << (8*0) );
GPIOB->CRH |=  ( (1) << (28*1) );
// 控制 ODR 寄存器
//;GPIOB_ODR &= ~(1<<0);
//GPIOB->ODR |= ((1)<<(15*1));
GPIOB->ODR&=~(0x00008000);
RCC_APB2ENR  |=  ( (1) << 3 );
// 配置IO口为通用推免输出模式
GPIOB->CRH &=  ~( (0x0f000000) << (7*0) );
GPIOB->CRH |=  ( (1) << (24*1) );
// 控制 ODR 寄存器
GPIOB->ODR |= ((1)<<(14*1));
#elif 1
//开GPIOB口端口时钟
  RCC_APB2ENR &=~((0x00000008)<<(3*0));
RCC_APB2ENR |=((1)<<(1*3));
//配置GPIO端口为通用推免输出模式
GPIOB->CRH&=~((0x0f000000)<<((7)*0));
GPIOB->CRH|=((1)<<(24*1));
GPIOB->CRL&=~((0x000000f0)<<((2)*0));
GPIOB->CRL|=((1)<<(4*1));
//控制GPIOB口输出数据
GPIOB->ODR&=~((0x00004002)<<((14)*0));
GPIOB->ODR|=(1<<(1*1));
GPIOB->ODR|=(1<<(14*1));


#endif

}


void SystemInit(void)
{
// 函数体为空,目的是为了骗过编译器不报错
}

头文件:

// 用来存放STM32寄存器映射的代码


// 外设  perirhral


#define  PERIPH_BASE               ((unsigned int)0x40000000)
#define  APB1PERIPH_BASE           PERIPH_BASE
#define  APB2PERIPH_BASE          (PERIPH_BASE + 0x10000)
#define  AHBPERIPH_BASE           (PERIPH_BASE + 0x20000)
#define  RCC_BASE                (AHBPERIPH_BASE + 0x1000)
#define  GPIOB_BASE              (APB2PERIPH_BASE + 0x0C00)
#define  RCC_APB2ENR            *(unsigned int*)(RCC_BASE + 0x18)

//#define  GPIOB_CRL              *(unsigned int*)(GPIOB_BASE + 0x00)
//#define  GPIOB_CRH              *(unsigned int*)(GPIOB_BASE + 0x04)
//#define  GPIOB_ODR              *(unsigned int*)(GPIOB_BASE + 0x0C)


typedef unsigned int uint_32;
typedef struct 
{
uint_32  CRL;
uint_32  CRH;
uint_32  IDR;
uint_32  ODR;
uint_32  BSRR;
uint_32  BRR;
uint_32  LCKR;



} GPIOB_Typedef;


#define GPIOB ((GPIOB_Typedef*)(GPIOB_BASE))


实验验证现场照片:







                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值