关于STM8定时器4的问题,无论怎么设置初值,计时器好像没有什么反应。
谢谢版主。实际用途是我需要在规定时间内执行一段代码n次,每次执行前我都检查一下是否超时,如果执行不完,直接break出去,并上报timeout。当然也可以用中断,建个变量。但这可能会打断我执行本次的代码。所以使用查询方式,没执行一次前查询下是否超时。我打算用开定时器->开始执行代码1次->执行完毕查询是否超时->未超时关定时器->清计数器->执行下一次(循环)这种方式 查看原帖>>
我也是初学者,说错莫怪。
你程序在定时器里面没出来,在就是看看程序中断优先级。定时器跑完后啥时候出来,你好像没写。
接收信号,你写个外部中断呗,PD7好像级别最高。设置一个变量,接收到信号,变量改变,启用外部中断。
2、TIM4_SR寄存器是否应该是TIM4_SR1
3、把初始化程序这样改一下试试,不用计数器
TIM4_ARR = 0x9c; //定时0.1ms
TIM4->IER = 0x01; //使能溢出中断
TIM4->PSCR= 0x01; //2分频
TIM4->CR1 = 0x01; //enable Timer4
// TIM4测试程序,编译器为IAR,硬件为STM8S003
#include <iostm8s003f3.h>
#include <stdint.h>
uint16_t xms;
void t4_init()
{
TIM4_PSCR = 0x03; // 预分频值为8,4uS计数时间
TIM4_ARR = 0xF9; // 自动装载值,4us*(249+1)=1mS更新一次
TIM4_CNTR = 0x00; // 计数器值
TIM4_IER = 0x01; // 允许T4更新中断
TIM4_CR1 = 0x81; // 预装载T4,开计数器
}
void main( void )
{
PD_DDR = 0x08; // PD3设置为输出
PD_CR1 = 0x08; // PD3设置为推挽输出
t4_init(); // TIM4初始化
asm("rim"); // 开总中断
while(1);
}
#pragma vector=25
__interrupt void TIM4_IRQ(void)// T4中断函数,每1mS进入一次
{
TIM4_SR = 0; // 清除中断标志
++xms;
if(xms==1000) // 计数1000mS
{
xms = 0;
PD_ODR_ODR3 = !PD_ODR_ODR3; // 翻转PD3
}
}
STM8是红外通讯的绝配
至于CIR的红外接收部分,因为产量比较大,有低成本模块供应,内置38~40KHz载波发生器,并直接输出解调后的二进制码流。所以解码接收部分任意MCU都可以实现。综上所述,STM8L的CIR方案中,主要考虑的是编码发射端。MCU产生38KHz载波最常见的方法是使用定时器。包括设定38KHz的中断,并在中断中去切换GPIO...
stm8的空指令延时c语言怎样写
单片机的C语言关于延时函数主要有两种一种是用for循环,通过单片机执行空指令达到延时的目的如:for(i=0;i<100;i++){;}这个简单的语句会执行100次空指令每一次指令的时间可以大概确定因此这个是最简单的延时函数第二种是通过定时器的方式来实现定时器是通过对单片机的晶振进行计数然后在定时器中断服务...
stm8 vref引脚有什么用
stm8的TIM1和TIM2可以输出PWM,输出管脚是TIM的通道,你可以使用库函数设置 先配置PWM频率,再配置PWM类型,通道,然后再使能定时器,如果需要使用中断,还可以打开中断 \/* Time base configuration *\/ TIM2_TimeBaseInit(TIM2_PRESCALER_1, 999...
如何给STM8芯片 指定ROM地址
带有32个中断的嵌套中断控制器 6个外部中断向量,最多27个外部中断 定时器 高级控制定时器:16位,4个捕获\/ 比较通道,3个互补输出,死区控制和灵活的同步 16位通用定时器,带有3个捕获\/ 比较通道(IC、OC 或 PWM)带有8位预分频器的8位基本定时器 自动唤醒定时器 2个看门狗定时器:窗口看门狗和...
stm8的AWU唤醒是不是就是RTC唤醒。为什么两种写的代码不一样,配置的...
因为你理解错了,两个是不同的唤醒当然是两种写法,配置两套寄存器。AWU唤醒:唤醒的源是LSI或HSI时钟源加定时器 RTC唤醒:唤醒的源是LSI加RTC 英文都叫clock,但要分清楚说的是real time clock还是system clock,不要搞混两件事。
为什么stm8s103f3p6 定时器不进入中断
DDR的bit2,bit1位设置为0(复位值也是0),并且又将PC_CR2的bit2,bit1位设置为1(复位值是0),可是STM8S103F3P6又没有对应的PC2,PC1引脚,于是程序出错,从而不能进入定时中断,也不执行其它语句。不过如果不用中断,其它语句是可以正常执行的,定时器的溢出标志也可以软件查询到。
stm8s103单片机定时器中断
设置一个标志,中断计时到标志置一,主程序一直查询这个标志动作。
stm8 在pwm模式下怎么发生溢出中断
仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须如下配置:向上计数方式:计数器CNT<CCRi≤ARR,向下计数方式:计数器CNT>CCRi。(图48:STM8单脉冲模式图例)例如,你需要在从TI2输入脚上检测到一个上升沿之后,延迟tDELAY,在OC1上产生一个tPULSE宽度的正...
stm8s207是什么集成电路?
\\x0d\\x0a \\x0d\\x0aSTM8S系列产品给开发人员带来产品兼容性的好处,在该系列产品内,不同型号产品的软件和堆叠式封装相互兼容,ST所有的微控制器(包括32位的STM32系列)的外设接口全部相互兼容。产品兼容性有利于平台设计,增加可用功能模块的数量,包括模式可配置的16位控制定时器、信号捕获\/比较...
STM8S单片机 定时器TIM1 设置输出PWM没有输出,只能输出一个固定的PWM...
在程序完全正确的情况下,还要根据所用的编程软件设置选项字节的。
尧委利血: 1、总中断开了吧~~~ enableInterrupts();开总中断(我用的是ST的编译器,不是IAR)2、TIM4_SR寄存器是否应该是TIM4_SR13、把初始化程序这样改一下试试,不用计数器 TIM4_ARR = 0x9c; //定时0.1ms TIM4->IER = 0x01; //使能溢出中断 TIM4->PSCR= 0x01; //2分频 TIM4->CR1 = 0x01; //enable Timer4
新平彝族傣族自治县17645505865: STM8为什么不能进入TMR4中断 - ?
尧委利血: 看一下定时器4的初始化是否正确,另外看看总中断enableInterrupts();是否打开,下面是我用定时器4定时1ms的初始化程序,可以参考一下:/******************************************************************************* function : 8位定时器4初始化**...
新平彝族傣族自治县17645505865: STM8的定时器 - ?
尧委利血: 高级控制定时器:16位,4个捕获/ 比较通道,3个互补输出,死区控制和灵活的同步16位通用定时器,带有3个捕获/ 比较通道(IC、OC 或 PWM) 带有8位预分频器的8位基本定时器 自动唤醒定时器2个看门狗定时器:窗口看门狗和独立看门狗
新平彝族傣族自治县17645505865: 为什么stm8s103f3p6 定时器不进入中断 - ?
尧委利血: 原因找到了.不是定时器设置的问题.而是程序中有这两条蓝色标记的语句: PC_DDR |= 0XE0;//将PC.7,,6,5 设为输出 //pc2,pc1看起来设置为了输入,但其实该芯片没有这两个引脚 PC_CR1 |= 0XE0;// 推挽输出 PC_CR2 &= ~0XE0;// MAX ...
新平彝族傣族自治县17645505865: STM8不能中断定时器,怎么搞啊!? - ?
尧委利血: L系列的定时器,中断默认是关闭的,需要手动开启,你的代码里面没有开启.S系列的是默认开启,所有不是设置.
新平彝族傣族自治县17645505865: STM8S单片机的定时器TIM4 的程序问题?
尧委利血: 你的预分频值有问题 TIM4_PSCR = 0x07; // 计数器时钟=主时钟/(0x07+1)=2MHZ/8=250K TIM4_ARR = 255; // 设定重装载时的寄存器值,255是最大值 TIM4_CNTR = 255; // 设定计数器的初值 定时器溢出时钟频率=250K/(ARR+1)=250K/256=976.5625Hz 定时时间=1024uS PB_ODR = PB_ODR ^ 0x08; // LED驱动信号取反 则闪烁频率为1/2 -> 488.28125Hz // LED闪烁频率=2MHZ/8/256/2=488.28125Hz 周期2048uS
新平彝族傣族自治县17645505865: STM8怎么设置定时器TIM1的10ms基准 - ?
尧委利血: 假设12M晶振,使用STM8外设库实现 void timer1(void) { TIM1_DeInit(); TIM1_TimeBaseInit(12000, TIM1_COUNTERMODE_UP,10,0);//10ms TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE); TIM1_Cmd(ENABLE); }
新平彝族傣族自治县17645505865: stm8同一个定时器不同通道可以不同频率吗 - ?
尧委利血: 可以,输出通道可以配置不同的分频和反转数值来实现不同频率的pwm
新平彝族傣族自治县17645505865: STM8定时器更新事件与中断有什么不同 - ?
尧委利血: 1、中断产生以后要把中断标志位清掉,这样才能保证执行中断里的程序的时候不会被新的中断打断,从而可以让中断服务程序全部执行完.2、中断服务程序程序执行完以后,要把中断打开(即把标志位置位),以便下一次还能触发该中断.这就是更新中断 外部中断是CPU的INT脚电平变化引发的中断,定时器中断是定时器达到计数值引发的中断.定时器中断适合需要定时引发的事件,外部中断适合外部随机发生,需要快速处理的事件. 两个中断是完全不同的硬件引发的,所以不能拿要不要重载初值来比较.外部中断是外部随机引发的自然是没有什么初值可言的
新平彝族傣族自治县17645505865: stm32的定时器4时钟频率 - ?
尧委利血: 定时器4的时钟为72MHz,而非36MHz.APB1是36MHz,但是定时器4倍频了,看一下时钟树就可以了.