您当前的位置: 首页 > 

韦东山

暂无认证

  • 0浏览

    0关注

    506博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C 语言操作寄存器开发

韦东山 发布时间:2021-04-08 15:04:02 ,浏览量:0

在使用C语言操作寄存器前,仍需要先分析《开发板原理图》和《参考手册》,从而得知需要操作哪些外设寄存器,假设读者已经了解需要操作哪些外设寄存器。

本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语言操作寄存器开发\”。

使用C语言之前,需要先设置栈,如代码段 6.3.1 所示,在上电复位后立即设置栈,随后跳入main函数执行。

代码段 6.3.1 设置栈(startup_stm32f10x_hd.s)

; Reset handler
Reset_Handler PROC
IMPORT main
LDR SP, =0x20000000+0x100
BL main
ENDP
END

代码段 6.3.2 C 语言操作寄存器(main.c)

#define RCC_APB2ENR (0x40021000 + 0x18)
#define GPIOB_BASE (0x40010C00)
#define GPIOB_CRL (GPIOB_BASE + 0)
#define GPIOB_ODR (GPIOB_BASE + 0X0c)
void delay(volatile long i)
{
while (i--);
}
int main(void) {
volatile unsigned int *pRccApb2Enr;
volatile unsigned int *pGpiobCrl;
volatile unsigned int *pGpiobOdr;
pRccApb2Enr = (volatile unsigned int *)RCC_APB2ENR;
pGpiobCrl = (volatile unsigned int *)GPIOB_CRL;
pGpiobOdr = (volatile unsigned int *)GPIOB_ODR;
/* 1. 使能 GPIOB 的时钟
* GPIO 是挂载在 APB2 上的,所以我们要使能 APB2 的外设时钟使能位
* 芯片手册 113 页 RCC_APB2ENR 寄存器描述中我们可以看到 APB2ENR[8:2]是 GPIO[G:A]时钟的控制位,控制 GPIO 时钟是失能或者使能
* 开发板上的 LED 的 GPIO 组是使用的 GPIOB,即要使能 APB2ENR[3]位,为其赋值“1”即可打开 GPIOB 的时钟 */
*pRccApb2Enr |= (1            
关注
打赏
1658827356
查看更多评论
0.1782s