2020-05-24

一、寄存器

  • 寄存器的映射
    根据每个单元的功能不同,以功能为名字给内存单元一个别名,而给这个已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器的映射。例如:GPIOB端口输出数据寄存器的地址是0x4001 0C0C,而ODR的寄存器是32bit,只有低16位有效,对相对应的IO写0或1控制低高电平【*(unsigned int *)(0x4001 0c0c)= 0xFFFF】一般我们都会用命名的方式来操作寄存器,这样不容易出错。
    如:#define GPIOB_ODR (相对应地址…)GPIOB_ODR = 0xFF;

  • 偏移地址
    偏移地址是指本寄存器相对于这个外设的基地址的偏移。例如:本寄存器的偏移地址是0x10,而在手册里面的GPIOA外设的基地址为0x4001 0800,我们可以推算出GPIOA_BSRR寄存器的地址为:0x4001 0800+0x10。

  • 封装总线和外设基地址
    在这里插入图片描述
    在这里插入图片描述
    首先定义了 “片上外设”基地址 PERIPH_BASE,接着在 PERIPH_BASE 上加入各个总线的地址偏移,得到 APB1、APB2 总线的地址 APB1PERIPH_BASE、APB2PERIPH_BASE,在其之上加入外设地址的偏移,得到 GPIOA-G 的外设地址,最后在外设地址上加入各寄存器的地址偏移,得到特定寄存器的地址。一旦有了具体地址,就可以用指针读写。例如:在这里插入图片描述

  • 修改寄存器的位操作方法-清零
    设a = 1001 1111 (0x9f)对其中的bit2清零有a &= ~(1〈〈 2);先对0000 0001左移两位,然后取反,再与a中的数做位与运算等到a = 1001 1011。如果需要连续的位清零就有a &= ~(x〈〈 y * z);其中x为连续位都为1时的16进制数值,y为每组地位数也就是连续的位有多少个,而z就是每一连续组的编号。

  • 修改寄存器位操作的方法-赋值
    设a = 1000 0011 , 假设对bit4和bit5赋值(从右开始数第五和第六个数)则有:a |= (1 << 2 * 2);

  • 修改寄存器位操作的方法-取反
    设a = 1001 0011, 把bit6取反有 a ^= (1 << 6);

⚠️新建工程中的注意事项⚠️

  1. 在魔术棒的Target中选择微库“Use MicroLib”,目的是可以在以后用printf函数。
  2. 把文件都添加好,基础的话要有三个文件:startup_stm32f10x_hd.s (官方提供)、stm32f10x.h(目前这个文件为空用于存放寄存器映射的代码)和main.c(用于c程序的编写)。

二、寄存器的简单用法(LED灯)

  • GPIO简介
    GPIO-通用输入输出端口的简称,是stm32可控制的引脚,当与外部设备连接起来的时候可以实现与外部通信、控制和采集信息的功能。

  • LED的亮灭
    控制STM32引脚输出高低电平来实现开关的控制,输入低电平LED灯就会被点亮。
    在这里插入图片描述
    (硬件连接图解)

  • 准备stm32f10x.h文件
    先把有关的寄存器映射代码都写到stm32f10x.h文件中,例如:在这里插入图片描述

  • mian文件的编写
    初始学习阶段我的SystemInit没有定义,这个函数是用来初始stm32系统时钟的,这里先用一个空函数骗过编译器。例:void SystemInit(void) { ; }
    之后我们可以操作地址的方法来点亮LED灯
    在这里插入图片描述
    上部分我学习了寄存器的映射,直接从我们写好的stm32f10x.h里面复制打包好的映射到main.c文件里面使用,如下图:
    在这里插入图片描述
    (附上次工程中已写好的stm32f10x.h文件里面的映射函数)
    在这里插入图片描述
    (学习书籍:《零死角玩转STM32》)

这是一个 SQL 语句,用于向借阅表中插入数据。该表包含以下字段:借阅编号、读者编号、书籍编号、借阅日期、归还日期、借阅状态。每条数据表示一次借阅记录。其中借阅编号、读者编号、书籍编号、借阅日期和借阅状态是必填项,归还日期为可选项,如果借阅状态为“已还”则必须填写归还日期。 具体插入的数据如下: - 借阅编号:100001,读者编号:123413,书籍编号:0001,借阅日期:2020-11-05,归还日期:NULL,借阅状态:借阅 - 借阅编号:100002,读者编号:223411,书籍编号:0002,借阅日期:2020-9-28,归还日期:2020-10-13,借阅状态:已还 - 借阅编号:100003,读者编号:321123,书籍编号:1001,借阅日期:2020-7-01,归还日期:NULL,借阅状态:过期 - 借阅编号:100004,读者编号:321124,书籍编号:2001,借阅日期:2020-10-09,归还日期:2020-10-14,借阅状态:已还 - 借阅编号:100005,读者编号:321124,书籍编号:0001,借阅日期:2020-10-15,归还日期:NULL,借阅状态:借阅 - 借阅编号:100006,读者编号:223411,书籍编号:2001,借阅日期:2020-10-16,归还日期:NULL,借阅状态:借阅 - 借阅编号:100007,读者编号:411111,书籍编号:1002,借阅日期:2020-9-01,归还日期:2020-9-24,借阅状态:已还 - 借阅编号:100008,读者编号:411111,书籍编号:0001,借阅日期:2020-9-25,归还日期:NULL,借阅状态:借阅 - 借阅编号:100009,读者编号:411111,书籍编号:1001,借阅日期:2020-10-08,归还日期:NULL,借阅状态:借阅
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值