[应用相关] stm32f10x单片机寄存器认识了解

[复制链接]
1248|32
 楼主| 自动化陈稳 发表于 2021-4-26 16:50 | 显示全部楼层
通过下图我们知道它的偏移地址这个也是我们最关心的问题。
  1. #define GPIOB_ODR                        *(unsigned int*)(GPIOB_BASE+0x0C)
  2. #define GPIOB_BSRR          *(unsigned int*)(GPIOB_BASE+0x10)
  3. #define GPIOB_BRR                        *(unsigned int*)(GPIOB_BASE+0x14)
 楼主| 自动化陈稳 发表于 2021-4-26 16:51 | 显示全部楼层
 楼主| 自动化陈稳 发表于 2021-4-26 16:52 | 显示全部楼层
 楼主| 自动化陈稳 发表于 2021-4-26 16:55 | 显示全部楼层
 楼主| 自动化陈稳 发表于 2021-4-26 17:45 | 显示全部楼层
好的通过上面的了解我们就已经完成了一个简单的映射

映射代码
stm32f10x.h
 楼主| 自动化陈稳 发表于 2021-4-26 17:46 | 显示全部楼层


  1. /*本文件用于添加寄存器地址及结构体定义*/

  2. /*片上外设基地址  */
  3. #define PERIPH_BASE           ((unsigned int)0x40000000)

  4. /*APB2 总线基地址 */
  5. #define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
  6. /* AHB总线基地址 */
  7. #define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)

  8. /*GPIOB外设基地址*/
  9. #define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)

  10. /* GPIOB寄存器地址,强制转换成指针 */
  11. #define GPIOB_CRL                        *(unsigned int*)(GPIOB_BASE+0x00)
  12. #define GPIOB_CRH                        *(unsigned int*)(GPIOB_BASE+0x04)
  13. #define GPIOB_IDR                        *(unsigned int*)(GPIOB_BASE+0x08)
  14. #define GPIOB_ODR                        *(unsigned int*)(GPIOB_BASE+0x0C)
  15. #define GPIOB_BSRR          *(unsigned int*)(GPIOB_BASE+0x10)
  16. #define GPIOB_BRR                        *(unsigned int*)(GPIOB_BASE+0x14)
  17. #define GPIOB_LCKR                *(unsigned int*)(GPIOB_BASE+0x18)
  18.                                                                                         //这里还有一个*号的意思是访问对应的内存地址改变它的值     
  19. /*RCC外设基地址*/
  20. #define RCC_BASE      (AHBPERIPH_BASE + 0x1000)


  21. /*RCC的AHB1时钟使能寄存器地址,强制转换成指针*/
  22. #define RCC_APB2ENR                 *(unsigned int*)(RCC_BASE+0x18)//这里是把这个数据强制转换为一个32位的指针地址   unsigned int  就是转换为32位的意思
 楼主| 自动化陈稳 发表于 2021-4-26 17:47 | 显示全部楼层
主函数部分

/*
        *工程模板(寄存器版本)
  */
#include "stm32f10x.h"


/**
  *   主函数
  */
int main(void)
{       
        // 开启GPIOB 端口时钟
        RCC_APB2ENR |= (1<<3);//                 1.时钟初始化

        //清空控制PB0的端口位
        GPIOB_CRL &= ~( 0x0F<< (4*0));//清空寄存器里面的值好进行配置         
        // 配置PB0为通用推挽输出,速度为10M  //   2.GPIO模式配置
        GPIOB_CRL |= (1<<4*0);

        // PB0 输出 低电平
        GPIOB_ODR &= ~(1<<0);//                    3.控制GPIO输出电平
       
        while(1);
}



// 函数为空,目的是为了骗过编译器不报错
void SystemInit(void)
{       
}






/*********************************************END OF FILE**********************/
 楼主| 自动化陈稳 发表于 2021-4-26 17:48 | 显示全部楼层
最后总结一下要了解stm32就一定要看stm32中文参考手册
kxsi 发表于 2021-5-11 10:58 | 显示全部楼层
这是哪本参考手册啊
aoyi 发表于 2021-5-11 10:58 | 显示全部楼层
基本上每个寄存器都介绍了
drer 发表于 2021-5-11 11:00 | 显示全部楼层
还没有用过f1系列的 以前一直在用f4的
gwsan 发表于 2021-5-11 11:01 | 显示全部楼层
如何查看地址的偏移呢
nawu 发表于 2021-5-11 11:05 | 显示全部楼层
感觉还是看英文参考手册准确点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部