这个只需要参考《STM32中文参考手册》 这里讲解了STM32的外设和功能,要操作哪些寄存器。这里推荐野火的
《零死角玩转STM32》这本书
这里 有一个屏蔽程序的小技巧
#if 0
代码
#endif
利用 这个条件编译宏 中间的代码段就会被屏蔽掉了 编写程序使得PB0口的 led点亮
下面开始编程包含头文件 “stm32f10x.h” 实现各种寄存器的映射,但是这里没有用到。之前已经知道STM32的端口状态是由 端口输出数据寄存器控制的
这个寄存器只有低16位有效,如果我们要往 PB0写0 ,那么要先找到GPIOB的地址
上面·的偏移值是相对于GPIOB基地址的偏移 怎么找GPIOB的基地址?
在第二章《STM32中文参考手册》 存储器映象中找 可以知道IO口是挂载到APB2高速总线上的
那么GPIOB 的ODR寄存器的地址就是 = 0x4001 0c00 +地址偏移(0x0c)
我们往0x4001 0c0c 这个 地址里写0 就可以让 GPIOB0输出 低电平
这里灯还是不会点亮的。为什么?
STM32的IO口可以设置成输入 也可以设置成输出
通过端口配置低寄存器进行配置 这个寄存器有高低两个,因为端口它是有16个IO的 这里4个位控制一个IO口,那么端口配置低寄存器应该控制低8位 那么我们要控制PBO就 只需要控制 0 1 2 3 这4个位就可以了 由这个表可以知道默认复位(00)是为输入的,而我们要想驱动LED就要设置成输出模式,这里根据下表设置为 推挽输出(为什么设为推挽,之后再讲)
这里根据下表写入值为0001 :表示配置为 输出模式 速度为10mhz
这时我们还是没有点亮LED ,为什么呢?
当STM32复位时,为了降低功耗它的时钟是关闭的,如果没有了时钟(心脏)就无法工作
那么时钟它由哪个外设控制呢? 就是 RCC 它挂载到AHB这个总线上的 我们找到《STM32中文参考手册》中的RCC寄存器描述,RCC这个外设控制着这两条 (APB1\APB2)总线里面的外设,如果说你要打开 GPIOB,那么你就要打开APB2 GPIOB的时钟,这里有一个叫 APB2外设时钟时钟使能寄存器 对应下面这个表我们可以知道要想打开GPIOB的时钟 就要将APB2外设时钟时钟使能寄存器的位3 置1。 同样我们找到这个寄存器的地址是 它的起始地址是4002 1000 偏移是18
到此我们灯正式点亮了
之后我们再讲一下 c语言里面的置位|= 和清0(&=~)
这里补充一点
当我们这个没有配置系统时钟,单片机会默认使用其内部的晶振 HSI(8M)来驱动系统进行工作(这样就没有什么意义了)单片机会变慢