在使用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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?