STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确

发布者:lcn18560863680最新更新时间:2021-11-10 来源: 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定时器首次进入中断时间不对

推荐阅读最新更新时间:2024-11-04 16:52

STM8 UART2
#include stm8s.h #include stm8s_conf.h #include UART2.h #include stdarg.h void UART2_Config(u32 Rate) { CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, ENABLE); GPIO_Init(UART2_PORT, TX2_PIN, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(UART2_PORT, RX2_PIN, GPIO_MODE_IN_PU_NO_IT); UART2_Init(Rate, U
[单片机]
STM8使用SPI通信需要注意的几个问题
概述: 在使用STM8L101F3单片机,SPI通信读取三轴传感器ADXL362数据时,出现了一系列的问题,在这里做个笔记,也希望可以给大家一个小的参考。 问题一: 在SPI初始化过程中,没有初始化MISO,MOSI,SCLK三个引脚,导致在通信过程中写数据读数据出现问题。所以在这里贴出测试后可以正常运行的SPI初始化代码。(STM8L101F3,使用官方标准库) #include stm8l10x.h #include stm8l10x_spi.h #include stm8l10x_gpio.h /***************************SPI相关定义*****************
[单片机]
iar forstm8使用教程
写在前面 Ⅰ 本文使用目前(2017年04月)最新版本的IAR forSTM8(EWSTM8)V2.20开发环境、STM8S103的处理器及最新版本STM8S标准外设库(STM8S_StdPeriph_Lib_V2.2.0)为例给大家讲述新建一个软件工程的详细过程。 本文分如下几个章节来讲述: 1.准备工作 Ø 下载安装EWSTM8 Ø 下载STM8标准外设库 Ø 整理工程文件夹 2.新建软件工程 Ø 创建工程 Ø 添加文件 Ø 配置工程 本文内容已经整理成PDF文件,提供给大家下载: http://pan.baidu.com/s/1geClBrH 准备工作 Ⅱ 俗话说“磨刀不误砍柴工”,做好了准备工作,后面新建软
[单片机]
iar forstm8使用教程
基于STM8的电容感应式触摸按键方案在电磁炉中的应用
1 引言 相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,机构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。ST针对家电应用特别是电磁炉应用,推出了一个基于STM8系列8位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。 2 方案介绍 ST的电容式触摸按键方案通过一个电阻和感应电极的电容CX构成的阻容网络的充电/放电时间来检测人体触摸所带来的电容变化。如图1所示,当人手按下时相当于感应电极上并联了一个电
[单片机]
基于<font color='red'>STM8</font>的电容感应式触摸按键方案在电磁炉中的应用
STM8 SPI从模式
STM8 SPI从模式 在从配置里,SCK引脚用于接收到从主设备来的串行时钟。SPI_CR1寄存器中BR 的设置不影响数据传输速率。 置配步骤 1.选择CPOL和CPHA位来定义数据传输和串行时钟之间的相位关系(见图91)。为保证正确的数据传输,从设备和主设备的CPOL和CPHA位必须配置成相同的方式。 2.帧格式(MSB在前还是LSB在前取决于SPI_CR1寄存器中的LSBFIRST位)必须和主设备相同。 3.在使用硬件模式(参考从选择(NSS)脚管理部分)时,NSS引脚在字节传输的全部过程中都必须为低电平。在使用件模式时,设置SPI_CR2寄存器中的SSM位并清除SSI位。 4.清除MSTR位,设置SPE位,使相应引脚工作
[单片机]
<font color='red'>STM8</font> SPI从模式
STVD环境下开发STM8
STVD编译好工程后,不知道在哪里查固件占用的FLASH、EEPROM、RAM情况,很不方便,查阅了相关资料后,终于找到一个简单高效的方法,亲测可用! 1、首先需要下载一个第三方工具,详见:https://download.csdn.net/download/hb69222/11762145 2、将上面的软件放在COSMIC编译软件的安装目录 默认的是C:Program FilesCOSMICCXSTM8 3、打开一个stm8工程,右键选择stm8l工程名,在弹出的快捷菜单中选择Setting选项,在弹出的工程选项设置中找到post-build选项 卡,在commands输入框中增加一行:size $(Outpu
[单片机]
STM8 时钟
时钟控制器功能强大而且灵活易用。其目的在于使用户在获得最好性能的同时,亦能保证消耗的功率最低。用户可独立地管理各个时钟源,并将它们分配到CPU或各个外设。主时钟和CPU时钟均带有预分频器。具有安全可靠的无故障时钟切换机制,可在程序运行中将主时钟从一个时钟源切换到另一个时钟源。抗电磁干扰时钟配置寄存器,STM8为了避免由电磁干扰造成的对应用程序误写操作或系统挂起,大多数关键的时钟配置寄存器都有一个互补寄存器与之相对应。系统将会自动检测这些关键寄存器与其互补寄存器之间是否匹配。如果不匹配,则产生一个EMS复位,从而使应用程序恢复到正常操作。详情请参见时钟寄存器描述。 主时钟源: 1-24MHz高速外部晶体振荡器(HSE)
[单片机]
<font color='red'>STM8</font> 时钟
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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