完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
液晶初始化 delay_ms(50); // delay 50 ms 进入
void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } 一下是delay函数 //////////////////////////////////////////////////////////// #define SUPPORT_OS 1 #if SUPPORT_OS #include "FreeRTOS.h" #include "task.h" #endif ////////////////////////////////////////////////////// oid delay_init(u8 SYSCLK) { #if SUPPORT_OS u32 reload; SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); fac_us=SYSCLK; reload=SYSCLK; reload*=1000000/configTICK_RATE_HZ; fac_ms=1000/configTICK_RATE_HZ; SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; SysTick->LOAD=reload; SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; #else SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; //ÿ¸ömsDèòaμÄsystickê±Öóêy #endif } void delay_us(u32 nus) { #if SUPPORT_OS u32 ticks; u32 told,tnow,tcnt=0; u32 reload=SysTick->LOAD; //LOADμÄÖμ ticks=nus*fac_us; //DèòaμĽúÅÄêy told=SysTick->VAL; //¸Õ½øèëê±μļÆêyÆ÷Öμ while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnow told=tnow; if(tcnt>=ticks)break; //ê±¼ä3¬1y/μèóúòaÑó3ùμÄê±¼ä,ÔòíË3ö. } }; #else u32 midtime; SysTick->LOAD=nus*fac_us; //ê±¼ä¼óÔØ SysTick->VAL=0x00; //Çå¿Õ¼ÆêyÆ÷ SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿aê¼μ1êy do { midtime=SysTick->CTRL; } while((midtime&0x01)&&!(midtime&(1<<16)));//μè′yê±¼äμ½′ï SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //1رռÆêyÆ÷ SysTick->VAL =0X00; //Çå¿Õ¼ÆêyÆ÷ #endif } /**************************************************************************** * Ãû 3Æ: void delay_xms(u16 nms) * 1| Äü£oÑóê±nms * èë¿ú2Îêy£oòaÑóê±μÄoáÃîêy * ·μ»Ø2Îêy£oÎT * Ëμ Ã÷£oSysTick->LOADÎa24λ¼Ä′æÆ÷,ËùòÔ,×î′óÑóê±Îa: nms<=0xffffff*8*1000/SYSCLK ¶Ô168Mìõ¼tÏÂ,nms<=798ms ****************************************************************************/ void delay_xms(u16 nms) { #if SUPPORT_OS u32 i; for(i=0;i u32 midtime; SysTick->LOAD=(u32)nms*fac_ms;//ê±¼ä¼óÔØ(SysTick->LOADÎa24bit) SysTick->VAL =0x00; //Çå¿Õ¼ÆêyÆ÷ SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿aê¼μ1êy do { midtime=SysTick->CTRL; } while((midtime&0x01)&&!(midtime&(1<<16)));//μè′yê±¼äμ½′ï SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //1رռÆêyÆ÷ SysTick->VAL =0X00; //Çå¿Õ¼ÆêyÆ÷ #endif } /**************************************************************************** * Ãû 3Æ: void delay_ms(u16 nms) * 1| Äü£oÑóê±nms * èë¿ú2Îêy£oòaÑóê±μÄoáÃîêy * ·μ»Ø2Îêy£oÎT * Ëμ Ã÷£onms:0~65535 ****************************************************************************/ void delay_ms(u16 nms) { #if SUPPORT_OS if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//Ïμí3òѾ-ÔËDD { if(nms>=fac_ms) //Ñóê±μÄê±¼ä′óóúOSμÄ×îéùê±¼äÖüÆú { vTaskDelay(nms/fac_ms); //FreeRTOSÑóê± } nms%=fac_ms; //OSòѾ-ÎT·¨ìá1©ÕaÃ′D¡μÄÑóê±áË,2éóÃÆÕí¨·½ê½Ñóê± } delay_us((u32)(nms*1000)); //ÆÕí¨·½ê½Ñóê± #else u8 repeat=nms/540; //ÕaàïóÃ540,êÇ¿¼ÂÇμ½Ä3D©¿í»§¿éÄü3¬Æμê1óÃ, //±èèç3¬Æμμ½248MμÄê±oò,delay_xms×î′óÖ»ÄüÑóê±541ms×óóòáË u16 remain=nms%540; while(repeat) { delay_xms(540); repeat--; } if(remain)delay_xms(remain); #endif } |
|
相关推荐
6个回答
|
|
参考下我们的freertos例程吧
|
|
|
|
再次说明一下 ,LCD驱动裸机ok
|
|
|
|
好的,我估计数systick定时计不合适 ,我看看!
|
|
|
|
视频中F429 FreeRTOS的PDF V1.2,怎么没有地方下载
|
|
|
|
论坛搜索
|
|
|
|
请问楼主解决了嘛?我也困在这个问题上了,我是移植freertos到正点原子的lcd的例程发现死在lcd初始化的delay里的
|
|
|
|
只有小组成员才能发言,加入小组>>
791 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2860 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2710 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1070浏览 3评论
193浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:44 , Processed in 1.141719 second(s), Total 88, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号