野火STM32指南者点亮第一个灯实验把我给劝退

 ###### 问题遇到的现象和发生背景

img

 ###### 问题相关代码,请勿粘贴截图
最主要是(unsigned int )0x40021018 |=((1)<<3);
(unsigned int )0x40010C00 |=((1)<<(45))里面的括号看的我很茫然有谁能解释一下((1)<<3)和((1)<<(4*5))是什么意思吗?
 ###### 运行结果及报错内容

 ###### 我的解答思路和尝试过的方法

 ###### 我想要达到的结果

这个例子真够烂的,第一次看到在代码里直接用数值表示寄存器的。
前面那个 (unsigned int )0x40010C00 是通过指针的方式操作寄存器,后面是对寄存器的进行操作的值。
((1)<<3)表示1左移3位的值,之所以要这么写,是因为想把bit3置1,((1)<<(4
5))同理,是1左移20位的值。

建议换一个例程,寄存器不应该直接用地址表示,(1)<<3是c语言的知识,表示把1左移3位,相当于把1乘以2的3次方。对于寄存器就是把bit3位置置1,
不要浪费时间在这种莫名其妙的例程,浪费时间。去找正点原子的一些例程还好