STM8S单片机的定时器TIM4 的程序问题

#include"STM8S105C_S.h"main(){PB_DDR=0x08;PB_CR1=0x08;//将PD3设置成推挽输出PB_CR2=0x00;TIM4_I... #include "STM8S105C_S.h"

main()
{

PB_DDR = 0x08;
PB_CR1 = 0x08; // 将PD3设置成推挽输出
PB_CR2 = 0x00;

TIM4_IER = 0x00; //

TIM4_EGR = 0x01; //
TIM4_PSCR = 0x07; // 计数器时钟=主时钟/128=2MHZ/128
// 相当于计数器周期为64uS
TIM4_ARR = 255; // 设定重装载时的寄存器值,255是最大值
TIM4_CNTR = 255; // 设定计数器的初值
// 定时周期=(ARR+1)*64=16320uS
TIM4_CR1 = 0x01;
while(1)
{
while((TIM4_SR& 0x01) == 0x00); // 等待更新标志
TIM4_SR= 0x00; // 清除更新标志
PB_ODR = PB_ODR ^ 0x08; // LED驱动信号取反
// LED闪烁频率=2MHZ/128/255/2=30.63
}
}
请问LED灯的闪烁频率怎么计算的。为啥不是16320US闪烁一次呢
展开
 我来答
好好斗地主zr
2019-06-06
知道答主
回答量:4
采纳率:0%
帮助的人:2081
展开全部
虽然是好久的问题了,但是我还要说两句。LED闪烁频率不就是1/16320/2吗?(与2MHZ/128/255/2=30.63一样的)定时器周期是16320US,因为每个定时器周期LED状态翻转一次,所以要除以2。(TIM4_PSCR = 0x07; // 计数器时钟=主时钟/128=2MHZ/128)这分频系数是没错的。分频系数7。实际分频数是2的7次方(128)的意思。
ming_180
推荐于2017-09-28 · 超过23用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:54.2万
展开全部
你的预分频值有问题
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
追问
你怎么记将分频(0x07+1)=2MHZ/8=250K  还要加1 这个是直接分频的。后面的计数加一是对的。
还有就是LED的闪烁频率具体是怎么算法 请教
追答
st的不管stm8还是stm32的TIM预分频器都差不多,肯定是没有0分频的,最小是1分频,所以0x00时是1分频,手册也写有的,一般习惯给预分频和重新装载寄存器减一,官方例程上也有这个习惯
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式