历史上的今天

今天是:2024年11月10日(星期日)

正在发生

2021年11月10日 | STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确

发布者:lcn18560863680 来源: eefocus关键字:STM8  定时器初始化  GPIO初始化 手机看文章 扫描二维码
随时随地手机看文章

现象

用定时器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){}

}

关键字:STM8  定时器初始化  GPIO初始化 引用地址:STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确

上一篇:梦之墨T系列产品的又一次完美亮相
下一篇:解决STM8定时器首次进入中断时间不对

推荐阅读

        集微网消息,2018年以来,终端市场行情出现较为明显的下滑,同时,股市融资环境也并不理想。这两方面的原因,导致今年手机产业链中许多上市公司都出现业绩下滑、资金流减少、负债增加、股权质押比例增加等现象。        其实这些手机产业链上市公司在规模、体量上胜过产业中许多企业,除了有明显的产品、资本优势外,更重要的是有...
(文章来源:中科罗伯特机器人学院) 我国早前由于充足的劳动力以及较低的劳动成本,吸引了许多外商投资,使得我国的制造业发展迅速。在之后十多年,我国制造业逐渐转型升级,密集型的手工劳动已经不能适应时代发展的需求。特别是最近今年人力成本的成倍增长。迫使我国制造业从沿海到内陆掀起了一股机器换人、工业自动化的浪潮。 我国的大部分工业在全...
杠杆、齿轮、滑轮、轮轴四大知识体系,几乎代表了机械结构的核心知识点。而作为现代机械体系基础的杠杆原理,更是儿童机器人编程学习的重中之重。 事实上,“杠杆”并非现代社会的产物,早在2000多年前,聪明的古人便会利用“杠杆”完成很多工作。 古希腊机械重度阿基米德,在《论平面的平衡》一书中最早提出了“杠杆原理”。阿基米德一生痴迷设计和制...
一、使用proteus绘制简单的电路图,用于后续仿真二、编写程序/********************************************************************************************************************---- @Project: LED-74HC595---- @File: main.c---- @Edit: ZHQ---- @Version: V1.0---- @CreationTime: 20200607---- @ModifiedTime: 20200607---- @Description: 用...

史海拾趣

问答坊 | AI 解惑

介绍几个偶常去的嵌入式论坛

前几天整理收藏夹,突然觉得自己在道上混了那么多年,也搜集了不少好的坛子所在,不敢独占,与众兄弟共享! 1. http://www.21 ic bbs.com/club/default.asp 正所谓隐者居于山,国内许多EEer元老级的人物就隐居于此,不少class级的帖子都源自于此.如果 ...…

查看全部问答∨

请教:注册表中的IClass是做什么用的?

IF BSP_NOI2C ! ;; I2C Bus Driver [HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn\\I2C]     "Prefix"="I2C"     "Dll"="I2C.DLL"     "Order"=dword:0     "Index"=dword:0 &nb ...…

查看全部问答∨

串口读取问题

PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,集成了两个SMC(串行管理控制器),针脚定义跟普通串口差不多,使用时只用一个。硬件就是这样,嵌入式系统是VxWorks。 编了一个读串口的小程序, ...…

查看全部问答∨

求开发板上数据处理的建议!

我在开发板上查了个传感器,现在已经能通过read等系统调用读出数据, 我是想把读出的数据存起来,而且还希望能通过PC机对这些数据读取、处理。这些数据是存在开发板上的数据库中好呢还是读到PC机上后再存到数据库中? 希望有经验的朋友给个建议, ...…

查看全部问答∨

老板发话:做个C6205的PCI BOOT.没有思路,求救

不知道有没有人做过tmsc6205的pci boot,能不能给点资料.…

查看全部问答∨

运算放大器

运算放大器有功率放大、电压放大、电流放大,它们之间有什么区别吗?分别用在什么场合啊?一直以来总是糊涂,有那位大侠能给总结一下,谢啦!…

查看全部问答∨

我这个DSP程序为什么进不了中断呢?

用的DSP是TMS320C6745,是SPI1的接收程序。运行时,无法进入SPI接收中断程序,总是停在主程序中的while(1)这里,进不了中断。 附上程序。   #include \"Initial.h\" extern CSL_SpiRegsOvly spiRegs;extern void intcVectorTable(void);Ui ...…

查看全部问答∨

请教个问题!!

关于步进电机,比如不细分单步运行,一步位1.8度,10细分后,每一步为0.18度,相应的驱动电流也只有原来的十分之一,那么能否在细分点上让电机停止呢? 比如,第一个细分点上让电机停止,它是不是就只走了0.18度呢? [ 本帖最后由 heyxiaohao 于 201 ...…

查看全部问答∨

CN0191_【10款典型实验室电路推荐】之五

【10款典型实验室电路推荐】之五:图1所示电路提供20位可编程电压,其输出范围为−10 V至+10 V ,同时积分非线性为±1 LSB、微分非线性为±1LSB,并且具有低噪声特性。                &n ...…

查看全部问答∨

有没有使用8个串口的芯片、单片机。

我们一直在寻找一个芯片有8的串口的IC、单片机。   之前有使用过模拟的方案,但是效果不理想。发送数据不稳定。                           &n ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved