stm32(1): 寄存器初使用

今日一言:
"每位师父都会各有长短,很正常。"
"那叶师父,你呢?"
"我每样都懂一点点。"
    ——《叶问》

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 mainvoid ){

    /* 打开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){
    // 空白系统初始化, 系统上电会调用的东西
}

亮灯(3):看看效果

posted @ 2020-05-15 13:38  RCKLOS  阅读(299)  评论(0编辑  收藏  举报