新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2020-5-24
- 在线时间
- 4 小时
|

楼主 |
发表于 2020-6-22 21:19:35
|
显示全部楼层
终于找到原因了。
把MODER = 0x00000005里的赋值改为MODER |= 0x00000005就OK了。
AC6编译导致的:
赋值语句出来的汇编:
19: RCC->AHB1ENR |= 1<<1;
0x080005F2 6801 LDR r1,[r0,#0x00]
0x080005F4 F0410102 ORR r1,r1,#0x02
0x080005F8 6001 STR r1,[r0,#0x00]
0x080005FA 2005 MOVS r0,#0x05
20: GPIOB->MODER = 0x00000005;
0x080005FC 6020 STR r0,[r4,#0x00]
0x080005FE 2100 MOVS r1,#0x00
21: GPIOB->OTYPER = 0x00000000;
0x08000600 6061 STR r1,[r4,#0x04]
0x08000602 210F MOVS r1,#0x0F
22: GPIOB->OSPEEDR = 0x0000000F;
0x08000604 60A1 STR r1,[r4,#0x08]
23: GPIOB->PUPDR = 0x00000005;
24:
25: while(1)
26: {
或赋值出来的汇编:
19: RCC->AHB1ENR |= 1<<1;
0x080005F2 6801 LDR r1,[r0,#0x00]
0x080005F4 F0410102 ORR r1,r1,#0x02
0x080005F8 6001 STR r1,[r0,#0x00]
20: GPIOB->MODER |= 0x00000005;
0x080005FA 6820 LDR r0,[r4,#0x00]
0x080005FC F0400005 ORR r0,r0,#0x05
0x08000600 6020 STR r0,[r4,#0x00]
0x08000602 2000 MOVS r0,#0x00
21: GPIOB->OTYPER = 0x00000000;
0x08000604 6060 STR r0,[r4,#0x04]
0x08000606 200F MOVS r0,#0x0F
22: GPIOB->OSPEEDR = 0x0000000F;
0x08000608 60A0 STR r0,[r4,#0x08]
0x0800060A 2005 MOVS r0,#0x05
23: GPIOB->PUPDR = 0x00000005;
24:
25: while(1) |
|