历史上的今天
今天是:2024年11月10日(星期日)
2021年11月10日 | STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确
2021-11-10 来源:eefocus
现象
用定时器TIM4定时翻转GPIO用低电平灌电流驱动LED闪烁的简单测试程序不能正常执行。LED灯不闪烁,debug查看GPIO口却是正确的被翻转了。测试IO口电压不对。
问题代码
void main(void)
{
// 系统时钟不分频(内部16MHz)
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
// TIM4进行128分频,同时设置溢出上限值保证1ms一次中断
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
// 开TIM4更新事件中断
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
// 开总中断
enableInterrupts();
// 使能定时器4
TIM4_Cmd(ENABLE);
// 初始化GPIO,输出上拉模式
GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_SLOW);
while (1){}
}
直接原因
继续debug发现GPIO的方向寄存器DDR和模式寄存器CR1没有被设置。
根本原因
在GPIO初始化完成之前定时器就开始运行了。导致不断进入定时器中断,后面的GPIO初始化代码没有正确被执行(或者定时器中断中不能被正确执行?这个没有深究了)
解决
将GPIO初始化代码放在定时器初始化之前(放在使能之前即可)
正确代码
void main(void)
{
// 系统时钟不分频(内部16MHz)
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
// GPIO的初始化要放在timer初始化之前,否则初始化的过程会被中断打断导致输出有问题(DDR还没来得及配置成输出模式)
GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_SLOW);
// TIM4进行128分频,同时设置溢出上限值保证1ms一次中断
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
// 开TIM4更新事件中断
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
// 开总中断
enableInterrupts();
// 使能定时器4
TIM4_Cmd(ENABLE);
while (1){}
}
上一篇:梦之墨T系列产品的又一次完美亮相
史海拾趣
|
由小方块组成的不同形状的“拼板”,陆续从屏幕上方落下来。玩家通过调整拼板的位置和方向,试图使它们在屏幕底部拼出完整的一条或几条。这些完整的横条会随即消失,给新落下来的方块腾出空间,与此同时,玩家得到分数奖励。没有被消除掉的方块 ...… 查看全部问答> |
|
在状态机中我们经常使用独热码,独热码的一个优势就是可以非常方便的取出一位就可以表示状态,免除复杂的比较电路,下面的代码定义了状态和状态信号提取.reg [6:0] txresp_state;localparam RD_FIFO& ...… 查看全部问答> |
|
VGA和TFT的切换会是在哪里处理呢,BIOS还是应用程序? 个人感觉只有应用程序才能解决,因为切换过程中会造成屏幕模糊,有涉及到显卡驱动,但是为什么我关掉了所有可能的进程还是能够切换,不解,请高人指点一二。… 查看全部问答> |
|
想计算机操作SIM卡中的STK,请问如何实现: 1、使用wavecom的设备,at指令祝贺操作 2、网上看了还有什么FETCH命令,这是如何样使用这些指令的?AT指令我知道用超级终端… 查看全部问答> |
|
音乐芯片MIDI方面的问题,我实在想不明白。各位大哥大姐帮帮我吧! 我的工作是单片机编程。我们公司的音乐芯片是DREAM的(不知道大家知道不?),然而现在老板把一个芯片的编程全部交给我做,他对这个芯片也不是很懂,只不过他对DREAM的其它型号的芯片了解。我现在把我的问题介绍如下: 现在是学习MIDI编程,但在这 ...… 查看全部问答> |
|
刚拿到三合一开发板,跑了一下例程,发现我每次用STLink调试之后,程序就自动下载到Flash里去的感觉,(断电重启程序就能开始跑了),觉得有点怪,是这样的吗?那它不需要烧Flash了?运行STVP也不允许我擦除。 //======================== ...… 查看全部问答> |
|
我是一个刚刚大学毕业的毕业生,现在刚到公司上班,分配的第一个任务是测试AD5735芯片,但是现在ADI的样片申请都要使用高校或者公司的邮箱,我没有,公司用的都是126的邮箱,我现在又急需要这个芯片,希望看到帖子,又能申请到样片的同志们,帮帮忙 ...… 查看全部问答> |




