完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如何在STM8S103F3上实现微秒延迟?
以上来自于谷歌翻译 以下为原文 How to implement microsecond delay on STM8S103F3? |
|
相关推荐
4个回答
|
|
|
|
|
|
.ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 p.MsoNormal,。ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 li.MsoNormal,.ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 div.MsoNormal {margin:0in; margin-bottom:.0001pt; font-size:11.0pt; font-family:'Calibri','sans-serif'; } .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 span.EmailStyle15 {font-family:'Calibri','sans-serif'; color:windowtext;} .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 .MsoChpDefault {;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in;}。ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 div.Section1 {page:Section1;}
你好 Boltnut,试试这个解决方案: / *通用1μs时基* / void Init_TIM2(void) { / * TimerTick =1μs 警告:fcpu必须等于16MHz fck_cnt = fck_psc / presc = fcpu / 16 = 1MHz - &gt;每1μs滴1次 ==&GT; 1μs/1μs= 1滴答 * / TIM2_TimeBaseInit(TIM2_PRESCALER_16,1); TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_GLOBAL); TIM2_ITConfig(TIM2_IT_UPDATE,ENABLE); TIM2_Cmd(ENABLE); } / **等一下 * @param [in]基于计时器Tick的延迟 * @return无 ** / void WaitDelay(u16延迟) { GTimeStamp = 0x00; SIM(); while(GTimeStamp&lt; = Delay); 轮缘(); } / ** * @brief Timer2更新/溢出/中断中断例程。 * @par参数: * 没有 * @retval * 没有 * / #ifdef _COSMIC_ @far @interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void) #else / * _RAISONANCE_ * / void TIM2_UPD_OVF_BRK_IRQHandler(void)中断13 #endif / * _COSMIC_ * / { GTimeStamp ++; TIM2_ClearFlag(TIM2_FLAG_UPDATE); } 问候 mozra 以上来自于谷歌翻译 以下为原文 .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 p.MsoNormal, .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 li.MsoNormal, .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 div.MsoNormal {margin:0in;margin-bottom:.0001pt;font-size:11.0pt;font-family:'Calibri','sans-serif';} .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 span.EmailStyle15 {font-family:'Calibri','sans-serif';color:windowtext;} .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 .MsoChpDefault {;} @page Section1 {size:8.5in 11.0in;margin:1.0in 1.0in 1.0in 1.0in;} .ExternalClass0DCDBD5026184B978A5ED1ABAF097CF4 div.Section1 {page:Section1;} Hi Boltnut,try this solution: /* General Purpose 1µs Time base */ void Init_TIM2(void) { /* TimerTick = 1µs Warning: fcpu must be equal to 16MHz fck_cnt = fck_psc/presc = fcpu/16 = 1MHz --> 1 tick every 1µs ==> 1 µs / 1µs = 1 ticks */ TIM2_TimeBaseInit( TIM2_PRESCALER_16, 1); TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_GLOBAL); TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE); TIM2_Cmd(ENABLE); } /** Wait a delay * @param[in] Delay based on timer Tick * @return None **/ void WaitDelay(u16 Delay) { GTimeStamp = 0x00; sim(); while (GTimeStamp <= Delay); rim(); }/** * @brief Timer2 Update/Overflow/Break Interruption routine. * @par Parameters: * None * @retval * None */ #ifdef _COSMIC_ @far @interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void) #else /* _RAISONANCE_ */ void TIM2_UPD_OVF_BRK_IRQHandler(void) interrupt 13 #endif /* _COSMIC_ */ { GTimeStamp++; TIM2_ClearFlag(TIM2_FLAG_UPDATE); } Regards mozra |
|
|
|
你能解释一下sim()/ rim()在WaitDelay()中的含义吗?
功能? 我的想法如下所示: void I2C_Delay(u8 bTime) { / * ld a,(OFST + 1,sp) 72 0007 0a01 dec(OFST + 1,sp) 73 0009 4d tnz a 74 000a 26f9 jrne L13 * / bTime / = 3; //每个循环3.5个循环! 而(bTime--) ; } / * I2C_Delay * / bTime处于STM8S机器周期 (SYSCLK = 1 / 16MHz = 62.5 ns = 0.0625 us)! 以上来自于谷歌翻译 以下为原文 Can you explain what the sim()/rim() are in WaitDelay() function ? My idea is shown as below: void I2C_Delay (u8 bTime) { /* ld a,(OFST+1,sp) 72 0007 0a01 dec (OFST+1,sp) 73 0009 4d tnz a 74 000a 26f9 jrne L13 */ bTime /= 3; // 3.5 cycles each loop ! while (bTime--) ; } /* I2C_Delay */ bTime is in STM8S machine cycles (SYSCLK = 1 / 16MHz = 62.5 ns = 0.0625 us) ! |
|
|
|
#define US(us)(F_CPU / 3000000.0 * us)
#define MS(ms)US(ms * 1000)//最大10ms #define _delay(循环) _asm(''$ N: n decw X n jrne $ L n nop'',(U16)循环); #define _delay_us(us)_delay(US(us)) void _delay_ms(U16 ms){ while(ms--){ _delay_us(1000); } } 以上来自于谷歌翻译 以下为原文 #define US(us) ( F_CPU / 3000000.0 * us ) #define MS(ms) US(ms * 1000) // maximum 10ms #define _delay( loops ) _asm(''$N: n decw X n jrne $L n nop'', (U16)loops); #define _delay_us(us) _delay(US(us)) void _delay_ms( U16 ms ) { while (ms--) { _delay_us( 1000 ); } } |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2715 浏览 1 评论
3235 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1807 浏览 1 评论
3643 浏览 6 评论
6031 浏览 21 评论
1333浏览 4评论
207浏览 3评论
195浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
348浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
440浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 15:45 , Processed in 1.747833 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号