32学习笔记之二寄存器点灯学习(

第一种方法:创建项目时只需要调用一个启动文件即可

看代码有注释

​
#if 0
#incclude<reg52.h>
sbit LED = P1^0;
void main(void )
{
    P1 = 0XFE;//总线操作
    LED = 0;//位操作
}
#end if
/*屏蔽程序中不需要的语句可以用#if 0 
#else if 0 ...以#eng if结束多种情况*/
int main(void)
{   /*GPIO的地址为基地址加上指定的偏移地址
    以PB0为例基地址为0x40010c00
    CRL的偏移地址为0x00得到的实际地址为0X40010C00
    强制数据转换为地址指针*(unsigned int*)
    配置IO口PB0端口配置低寄存器 引脚0-7为低 配置CRL寄存器
    引脚8-15为高 配置CRH寄存器设置对应自己所需的引脚位*/
    //配置GPIOB端口的时钟打开
    *(unsigned int*)0X40021018|= (1<<3);
    //配置IO输出模式
    *(unsigned int*)0X40010C00|= ((1)<<(4*0));/*CRL寄存器为4位操作所以是4*0右移配置4位设置输出方式为推挽输出,速度为50M*/
    //配置ODR寄存器使PB0输出低电平                                            
    *(unsigned int*)0X40010C0C&=~(1<<0);//配置ODR寄存器使PB0输出低电平 ODR低16位有效
//置位  |=   ,清零  &=~
//
}

​

第二种方法:是建立在第一种之上便于理解

对相关的寄存器地址进行定义放在stm32f10x.h库中进行直接调用见图

​

/*本文件用于添加寄存器地址及结构体定义*/

/*片上外设基地址  */
#define PERIPH_BASE           ((unsigned int)0x40000000)

/*APB2 总线基地址 */
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
/* AHB总线基地址 */
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)

/*GPIOC外设基地址*/
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)

/* GPIOC寄存器地址,强制转换成指针 */
#define GPIOC_CRL			*(unsigned int*)(GPIOC_BASE+0x00)
#define GPIOC_CRH			*(unsigned int*)(GPIOC_BASE+0x04)
#define GPIOC_IDR			*(unsigned int*)(GPIOC_BASE+0x08)
#define GPIOC_ODR			*(unsigned int*)(GPIOC_BASE+0x0C)
#define GPIOC_BSRR	  *(unsigned int*)(GPIOC_BASE+0x10)
#define GPIOC_BRR			*(unsigned int*)(GPIOC_BASE+0x14)
#define GPIOC_LCKR		*(unsigned int*)(GPIOC_BASE+0x18)

/*RCC外设基地址*/
#define RCC_BASE      (AHBPERIPH_BASE + 0x1000)
/*RCC的AHB1时钟使能寄存器地址,强制转换成指针*/
#define RCC_APB2ENR		 *(unsigned int*)(RCC_BASE+0x18)

​

主函数

include "stm32f10x.h" 


/**
  *   主函数
  */
int main(void)
{	
	// 开启GPIOC 端口时钟
	RCC_APB2ENR |= (1<<4);

	//清空控制PC2的端口位
	GPIOC_CRL &= ~( 0x0F<< (4*2));	
	// 配置PC2为通用推挽输出,速度为10M
	GPIOC_CRL |= (1<<4*2);

	// PC2 输出 低电平
	GPIOC_ODR &= ~(1<<2);
	
	while(1);
}

找基地址和偏移地址方法见图以GPIOB低位为例操作CRL相应的位可以控制输入输出模式以及速度

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值