STM32F103 blue pill-led裸机闪烁相关问题
STM32F103 blue pill - problems related to blinking led bare metal
我在尝试运行此代码以使蓝色药丸板(STM32F103C8、ARM Cortex M3)上的内置 LED(位于 PC13)闪烁时遇到问题:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
while(1){
GPIOC->ODR |= 1<<13;//off
for(unsigned int i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(unsigned int i = 0;i < max;++i);
}
}
。
在这里我收到一些错误,我不知道为什么:
有人能帮帮我吗?
此外,当我在 while 循环中声明无符号整数“i”时一切正常,但即使没有任何反应,LED 仍然不会闪烁。这是修改后的代码:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
while(1){
unsigned int i;
GPIOC->ODR |= 1<<13;//off
for(i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(i = 0;i < max;++i);
}
}
。
此外,我尝试了另一个技巧,在循环外声明整数“i”,如下所示:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
unsigned int i;
while(1){
GPIOC->ODR |= 1<<13;//off
for(i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(i = 0;i < max;++i);
}
}
。然后,我收到了下一条错误消息:
.现在,问题是为什么?
请帮助我。
在 uVision 项目配置对话框 C/C++ 选项卡中,select“使用 C99”。
ISO C90 不再允许在 for
语句或语句块中的非声明代码后声明变量。
或者将声明移动到需要它的语句块的顶部。不过最好还是使用 C99——我认为它已经存在了足够长的时间,可以被视为最低公分母标准!
我在尝试运行此代码以使蓝色药丸板(STM32F103C8、ARM Cortex M3)上的内置 LED(位于 PC13)闪烁时遇到问题:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
while(1){
GPIOC->ODR |= 1<<13;//off
for(unsigned int i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(unsigned int i = 0;i < max;++i);
}
}
。
在这里我收到一些错误,我不知道为什么:
有人能帮帮我吗? 此外,当我在 while 循环中声明无符号整数“i”时一切正常,但即使没有任何反应,LED 仍然不会闪烁。这是修改后的代码:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
while(1){
unsigned int i;
GPIOC->ODR |= 1<<13;//off
for(i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(i = 0;i < max;++i);
}
}
。 此外,我尝试了另一个技巧,在循环外声明整数“i”,如下所示:
#include "stm32f10x.h" // Device header
#define max 1000000
int main(void){
RCC->APB2ENR |= 1<<4;
GPIOC->CRH &= 0xFF0FFFF;//clear the necessary bit
GPIOC->CRH |= 0x00300000;//set the necessary bit
GPIOC->ODR &= ~(1<<13);//turn PC_13 ON
unsigned int i;
while(1){
GPIOC->ODR |= 1<<13;//off
for(i = 0;i < max;++i);
GPIOA->ODR &= ~(1<<13);//on
for(i = 0;i < max;++i);
}
}
。然后,我收到了下一条错误消息:
在 uVision 项目配置对话框 C/C++ 选项卡中,select“使用 C99”。
ISO C90 不再允许在 for
语句或语句块中的非声明代码后声明变量。
或者将声明移动到需要它的语句块的顶部。不过最好还是使用 C99——我认为它已经存在了足够长的时间,可以被视为最低公分母标准!