完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在用ds18b20温度传感器,微妙级别要求。
求教 我设置的一分频 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); 用下边的微秒延时,总是都不出来,有点怀疑是延时问题,哪位大神帮忙分析下 void delay_us(u16 z) //微秒延时 { while(z--) { nop();nop();nop();nop(); } } 下边的us延时行得通吗? /****stm2查询法***/ void delay_us(u16 i) { tiM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_1,16); while (i--) { TIM2_Cmd(ENABLE); while (TIM2_GetFlagStatus(TIM2_FLAG_UPDATE )!=1); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_Cmd(DISABLE); } } |
|
相关推荐
5个回答
|
|
我倾向与这个方式
/****tim2查询法***/ void delay_us(u16 i) { TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_1,16); while (i--) { TIM2_Cmd(ENABLE); while (TIM2_GetFlagStatus(TIM2_FLAG_UPDATE )!=1); TIM2_ClearFlag(TIM2_FLAG_UPDATE); TIM2_Cmd(DISABLE); } }但是这个代码有点不知道行不行 我会这样写,先初始化,非精确代码,只说思路 void Timer2Init(void) { TIM2_DeInit(); TIM2_TimeBaseInit(TIM2_PRESCALER_1,16); TIM2_Cmd(ENABLE); } 初始化好timer2,让它上电之后就开始不停的跑,周期定为高于1us,最好是倍数关系 延时函数 void Delay_us(char us_n) { unsigned char time1,time2,temp; unsigned char delay_time; delay_time = us_n * TIM2_TIKET; //将us值转换为timer2的计数次数 time1 = TIM2_CNT; //时刻1 do { time2 = TIM2_CNT;//时刻2 if( time2 >= time1 ) //计算时间 { temp = time2 - time1; } else { temp = 0xFF - (time1 - time2) +1; //timer2溢出1次处理,如果溢出两次,还需要增加其他处理 } }while( temp < delay_time ) //判断时间是否到达 } 这种方式使用是比较常见的,精确度可以用示波器通过IO口延时一定时间变化电平来测量 我只表达思路,我在STM8里面也这样用过,在其他芯片也可以这样使用。时间还是比较准的。 值得注意的是,如果timer2是8位的,要考虑溢出的情况和最大的延时时间。如果延时us数超过溢出值,最好使用16位计时器。16也同样会溢出。 针对溢出,假设设定timer2最大能延时50us,需要延时100us,那就是调用两次。以此类推。 |
|
|
|
对不起,忘记回复了。有一段时间没有上线。 |
|
|
|
哈哈,好像没人回答我来扯两句,
1、先说18B20,它的延迟可以多不可以少不需要灰常精确。 2、这个延迟函数void delay_us(u16 z) //微秒延时 { while(z--) { nop();nop();nop();nop(); } }我在最新版本的IAR for STM8 2.20.1上仿真了下,每个while循环需要11个时钟周期,进出函数需要20个时钟周期。也就是说delay_us(2)需要20+11*2=42个时钟周期8M的晶振就是42/8=5.25us。同理delay_us(100)需要20+100*11=1120个周期建议去掉只保留1个nop好计算。 3.中断,stm8刚点亮了第一个LED不是很懂,但是考虑进出函数的压栈用时肯定不止一两us,如果延迟都在10us以上没问题如果想精确延迟就1个us还是宏定义nop nop ...的准。 |
|
|
|
看时序就可以了,网上的例子很多,不需要特别精确
|
|
|
|
要精确延时用定时器啊骚年
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1148 浏览 2 评论
1497 浏览 3 评论
1129 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1266 浏览 0 评论
1553 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-15 23:14 , Processed in 0.577435 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191