MCU 如何控制外设

单片机如何控制外设

单片机不是直接控制外设的,而是通过配置片上外设寄存器来控制其输出和检测高低电平,进而控制外围器件

单片机如何配置寄存器的?

 下图是单片机驱动 点亮发光二极管

  1. 内核从flash里面加载读取指令。
  2. 内核根据指令到SRAM里面对应的地址读取数据,这些数据就是即将赋值给GPIO片上外设寄存器里的数据。
  3. 内核通过总线对GPIO寄存器赋值。
  4. 如果寄存器某一位为零,那么对应的IO口对应的一些开关电路就会输出低电平。LED另一端接高电平时,LED就会点亮。

单片机是如何找到寄存器的?

每个寄存器都有对应的地址,单片机通过地址访问寄存器,ARM寻址范围4GB(2的32次方=4G byte),分为多个块,片上外设对应的地址范围是0x4000 0000-0x6000 0000。

 C程序是如何实现访问寄存器的?

C程序通过指针访问寄存器,这也是指针嵌入式开发中的一个典型应用。

//访问GPIOG这一组IO口contrl0寄存器,赋值0xFFFFFFFF
#define APB2_BUS_BASE        ((uint32_t)0x40010000U)
#define GPIO_BASE            (APB2_BUS_BASE + 0x00000800U)
#define GPIOG                (GPIO_BASE + 0x00001800U)       //先定义GPIOG基地址,通过计算是0x40012000
#define GPIO_CTL0(gpiox)     REG32((gpiox) + 0x00U)          //再找到GPIO control 0 的寄存器地址,  就是在GPIOG的基础上,再加一个偏移地址。
#define REG32(addr)          (*(volatile uint32_t*)(uint32_t)(addr))

GPIO_CTL0(GPIOG) = 0xFFFFFFFF;

//展开上面这条赋值语句就是: *(volatile uint32_t*)0x40012000 = 0xFFFFFFFF

猜你喜欢

转载自blog.csdn.net/Arvin_ing/article/details/128065143
今日推荐