
新人一枚,百思不得其解,跑来请教大神 /* 添加包含芯片的头文件 */ #include<iostm8s103f3.h> /******************************************************************************* **函数名称:void Timer4Init() **功能描述:定时器4参数初始化 **入口参数:无 **输出:无 *******************************************************************************/ void Timer4Init() { TIM4_IER_bit.TIE = 0; // 禁止(触发)中断 TIM4_IER_bit.UIE = 0; // 产生 TIM4_EGR_bit.UG = 1; // 允许产生更新事件 TIM4_PSCR_bit.PSC = 7; // 计数器时钟=主时钟16MHz / 128 = 125KHz (每8us计数值加1) TIM4_ARR = 125; //设定定时器4产生1毫秒重装载时的计数值,255是最大值 TIM4_CNTR = 0x00; // 设定计数器的初值 } /******************************************************************************* **函数名称:void TIM4Delayms(unsigned int ms) **功能描述:定时器4参进行精确延时,最小为1毫秒,最大65535 **入口参数:unsigned int ms 1=< ms <= 65535 **输出:无 *******************************************************************************/ void TIM4Delayms(unsigned int ms) { TIM4_CNTR = 0x00; // 设定计数器的初值 TIM4_CR1_bit.CEN = 1; //启动定时器4开始计数 while(ms--) { while(TIM4_SR_bit.UIF == 0); //等待计数是否达到1毫秒 TIM4_SR_bit.UIF = 0; //计数完成1毫秒,清除相应的标志 } TIM4_CR1_bit.CEN = 0; //延时全部结束,关闭定时器4 } /******************************************************************************* **函数名称:void LED3_Init() **功能描述:LED3->功能引脚初始化 **入口参数:无 **输出:无 *******************************************************************************/ void LED3Init() { PC_DDR_bit.DDR6 = 1; //设置端口PC->6的输入输出方向寄存器为输出方向 PC_CR1_bit.C16 = 1; //PC->6为推挽输出 PC_CR2_bit.C26 = 1; //PC->6是输出速度最快为10MHz } /* 主函数 */ int main(void) { asm("sim"); //关闭系统总中断 CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 内部时钟 = 16Mhz Timer4Init(); //调用定时器4初始化函数 LED3Init(); //调用LED3初始化函数 while(1) { PC_ODR ^= 0x40; //异或取反PC->6 ,控制LED3进行周期性亮灭亮灭操作 TIM4Delayms(1000); //调用定时器4进行精确延时1000毫秒,即1秒 } } 这是一个定时器精确延时的程序(红色部分我不理解) 问题: 1.对TIM4_EGR事件产生寄存器,UG置1,会有什么变化?(是立即产生中断?还是由我设置了初值后,溢出产生中断?) 2.对UG的理解(请指正): >>>>>>>>>UG置1,是不是会产生更新中断请求,收到请求后,硬件会将更新中断标志UIF置1,与中断使能寄存器IER的UIE无关 3.为什么溢出后IER寄存器的UIF都复位了,还需要清零? 4.为啥定时器4参进行精确延时,最大65535?(我认为是例程编写者可能说错了) |
STM8S003无法检测到引脚电平
STM8 @svlreg 问题
STM8AF62XX+L99PM62GXP LIN通讯的电路原理图有吗?官网提供了一套软件,没找到对应的原理图,请大家指教一下
求一个STM8S207例程
初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
3、UIF是硬件置位 需要软件清除
4、定时器是16位的定时器,计数器最大就到65535,初始化的时候将定时器的频率设置为1ms,那么最大延时就是65535ms,如果时间不够,可以更改定时器频率,但是跨度就是65535
评分
查看全部评分
感谢你的解答,我的疑问是TIM4是一个8位定时器呀
啊 不好意思 看错了 TIM4是8位定时器 初始化以后是1ms的中断定时 在延时函数里定义的int类型是16位的 最大到65535 如果想加大数据 可以换成long型的
明白了