发新帖我要提问
12
返回列表
打印
[应用相关]

stm32f10x单片机寄存器认识了解

[复制链接]
楼主: 自动化陈稳
手机看帖
扫描二维码
随时随地手机跟帖
21
自动化陈稳|  楼主 | 2021-4-26 16:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
通过下图我们知道它的偏移地址这个也是我们最关心的问题。
#define GPIOB_ODR                        *(unsigned int*)(GPIOB_BASE+0x0C)
#define GPIOB_BSRR          *(unsigned int*)(GPIOB_BASE+0x10)
#define GPIOB_BRR                        *(unsigned int*)(GPIOB_BASE+0x14)

使用特权

评论回复
22
自动化陈稳|  楼主 | 2021-4-26 16:51 | 只看该作者

使用特权

评论回复
23
自动化陈稳|  楼主 | 2021-4-26 16:52 | 只看该作者

使用特权

评论回复
24
自动化陈稳|  楼主 | 2021-4-26 16:55 | 只看该作者

使用特权

评论回复
25
自动化陈稳|  楼主 | 2021-4-26 17:45 | 只看该作者
好的通过上面的了解我们就已经完成了一个简单的映射

映射代码
stm32f10x.h

使用特权

评论回复
26
自动化陈稳|  楼主 | 2021-4-26 17:46 | 只看该作者
 

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

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

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

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

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


/*RCC的AHB1时钟使能寄存器地址,强制转换成指针*/
#define RCC_APB2ENR                 *(unsigned int*)(RCC_BASE+0x18)//这里是把这个数据强制转换为一个32位的指针地址   unsigned int  就是转换为32位的意思

使用特权

评论回复
27
自动化陈稳|  楼主 | 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**********************/

使用特权

评论回复
28
自动化陈稳|  楼主 | 2021-4-26 17:48 | 只看该作者
最后总结一下要了解stm32就一定要看stm32中文参考手册

使用特权

评论回复
29
kxsi| | 2021-5-11 10:58 | 只看该作者
这是哪本参考手册啊

使用特权

评论回复
30
aoyi| | 2021-5-11 10:58 | 只看该作者
基本上每个寄存器都介绍了

使用特权

评论回复
31
drer| | 2021-5-11 11:00 | 只看该作者
还没有用过f1系列的 以前一直在用f4的

使用特权

评论回复
32
gwsan| | 2021-5-11 11:01 | 只看该作者
如何查看地址的偏移呢

使用特权

评论回复
33
nawu| | 2021-5-11 11:05 | 只看该作者
感觉还是看英文参考手册准确点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则