今日一言:
"每位师父都会各有长短,很正常。"
"那叶师父,你呢?"
"我每样都懂一点点。"
——《叶问》
stm32(1): 寄存器初使用
本文阅读不仅需有一定的相关基础,
还需自备《stm32参考手册》
亮灯(1):前期准备
硬件:
- ST-LINK
- STM32最小系统板(STM32F103C8T6)
软件:
- MDK
目标:
- 点亮PC13
亮灯(2): 查表
- RCC_AHB(复位时钟)基地址:0x40021000
- RCC_APB2ENR(外设使能时钟)偏移地址:0x18
- GPIOC基地址:0x40011000
- GPIOx_CRH(GPIO配置高寄存器)偏移地址:0x04
- GPIOX_ODR(GPIO输出数据寄存器)偏移地址:0x0C
亮灯(3):程序实现
/* 基地址 */
#define RCC_AHB (unsigned int)0x40021000
#define GPIOC (unsigned int)0x40011000
/* 寄存器 */
#define RCC_APB2ENR *(unsigned int*)(RCC_AHB + 0x18)
#define GPIOC_CRH *(unsigned int*)(GPIOC + 0x04 )
#define GPIOC_ODR *(unsigned int*)(GPIOC + 0x0C )
/* 程序入口 */
int main( void ){
/* 打开GPIOC的时钟 */
RCC_APB2ENR |= 1<<4;
/* 配置GPIOC高寄存器 */
GPIOC_CRH &= ~(0x0F << (4*5));/* 清空配置 */
GPIOC_CRH |= (0x01 << (4*5));/* 配置推挽输出,最大速度10MHz */
/* 拉低GPIO的第13脚 */
GPIOC_ODR &= ~( 1 << 13 );
}
void SystemInit(void){
// 空白系统初始化, 系统上电会调用的东西
}