这两天使用STM32F103C6实现LED小灯闪烁的功能,延时函数使用的是软件延时,没想到以前在其他程序屡试不爽的延时函数在这居然死活不起作用!!!直接让我一度怀疑了自己的水平了啊(虽然水平确实不咋样不说丧气话)。。。于是一行一行看仔细检查代码,检查软件设置,上百度......翻来覆去始终找不到原因,被折磨得直接怀疑人生,甚至怀疑软件是不是有问题(哈哈哈哈)
被折磨了两天后终于找出了问题。。。程序部分很简单:
LED亮灭的宏定义
//输出低电平为亮,高电平为灭
//LED接在GPIOA的bit0
#define LED_ON GPIO_ResetBits(GPIOA,GPIO_Pin_0)
#define LED_OFF GPIO_SetBits(GPIOA,GPIO_Pin_0)
LED初始化部分
void LED_Init(void)
{
//定义GPIO初始化结构体变量
GPIO_InitTypeDef GPIO_InitStructure;
//打开要使用端口的时钟->GPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//对已选择端口引脚的配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
//端口速度的设置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//端口输出模式的设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
//对GPIOA端口的初始化
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
主程序部分
int main()
{
LED_Init();
while(1)
{
LED_ON; //亮
delayms(1000);
LED_OFF; //灭
delayms(1000);
}
}
就是这样被一个简单的程序折磨了两天
在一通的鼓捣下,终于把问题解决了(虽然具体原因不清楚...)编译器当时选择的是version 6,在调试的时候发现跳不出delayms()函数,导致程序验证失败,后来把编译器换成了version 5,总算实现了LED的闪烁。。。
编译器version 5和version 6的区别可参考:Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别_strongerHuang的博客-CSDN博客
参考: