20260106:移植了野火的ESP-01s驱动代码,初步实现功能。

This commit is contained in:
2026-01-06 01:22:02 +08:00
parent bd85b7395e
commit 2e6795f988
26 changed files with 1770 additions and 605 deletions

View File

@@ -2,40 +2,40 @@
#if MODE == USE_SYS_TICK
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
//SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8
//SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
/**
* @brief <20><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
* @note <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪAHBʱ<42>ӵ<EFBFBD>1/8<><38>SYSCLK:ϵͳʱ<CDB3><CAB1>Ƶ<EFBFBD><C6B5>
* @param None
* @retval None
*/
void vDelayInit(void)
{
uint8_t ucSYSCLK;
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
xUcFacInit.ucFacUs=ucSYSCLK/8;
xUcFacInit.usFacMs=(uint16_t)xUcFacInit.ucFacUs*1000;
}
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
xUcFacInit.ucFacUs=ucSYSCLK/8;
xUcFacInit.usFacMs=(uint16_t)xUcFacInit.ucFacUs*1000;
}
//<2F><>ʱnus
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
/**
* @brief ΢<><EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ16777215us
* @param ulNus: <20><>ʱ<EFBFBD><CAB1>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
* @retval None
*/
void vDelayUs(uint32_t ulNus)
{
uint32_t ulTemp;
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL=0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
SysTick->LOAD=ulNus*xUcFacInit.ucFacUs; // ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL=0x00; // <EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
do
{
ulTemp=SysTick->CTRL;
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD><EFBFBD><E4B5BD>
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL =0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
} while((ulTemp&0x01)&&!(ulTemp&(1<<16))); // <EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; // <EFBFBD>رռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SysTick->VAL =0x00; // <EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><>ʱnms
//ע<><D7A2>nms<6D>ķ<EFBFBD>Χ
//SysTick->LOADΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK<4C><4B>λΪHz,nms<6D><73>λΪms
//<2F><>72M<32><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nms<=1864
/**
* @brief <20><><EFBFBD><EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD>Systick<63><6B>ʱ<EFBFBD><CAB1>Ϊ24λ<34><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ֵΪ0xFFFFFF<46><46>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>16777215<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>0xFFFFFF<46><46><EFBFBD><EFBFBD>ʵ<EFBFBD>ʼ<EFBFBD><CABC>ص<EFBFBD>ֵ<EFBFBD><D6B5>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD>
@@ -66,62 +66,67 @@ void vDelayMs(uint16_t usNms)
#elif MODE == USE_DWT
/**
* @brief DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
* @note DWT<57><54>ʱ<EFBFBD><CAB1><EFBFBD>ȸߣ<C8B8><DFA3>ʺ϶<CABA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ
* @param None
* @retval None
*/
void vDelayInit(void)
{
//ʹ<><CAB9>DWT<57><54><EFBFBD><EFBFBD>
DEMCR |= (uint32_t)TRCENA;
//DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
DWT_CYCCNT = (uint32_t)0u;
//ʹ<><CAB9>Cortex-M3 DWT CYCCNT<4E>Ĵ<EFBFBD><C4B4><EFBFBD>
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA;
DEMCR |= (uint32_t)TRCENA; // ʹ<EFBFBD><EFBFBD>DWT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWT_CYCCNT = (uint32_t)0u; // CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWT_CTRL |= (uint32_t)DWT_CTRL_CYCCNTENA; // ʹ<><CAB9>CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
// ΢<><CEA2><EFBFBD><EFBFBD>ʱ
/**
* @brief ΢<><EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ10000us
* @param ulNus: <20><>ʱ<EFBFBD><CAB1>΢<EFBFBD><CEA2><EFBFBD><EFBFBD>
* @retval None
*/
void vDelayUs(uint32_t ulNus)
{
if(ulNus > 10000) ulNus = 10000;
uint32_t ulTicksStart, ulTicksEnd, ulTicksDelay;
ulTicksStart = DWT_CYCCNT;
ulTicksDelay = ( ulNus * ( SystemCoreClock / (1000000) ) ); // <20><>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵδ<C9B5><CEB4><EFBFBD>
ulTicksEnd = ulTicksStart + ulTicksDelay;
// ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( ulTicksEnd >= ulTicksStart )
/* <20><>ulTicksEndû<64><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
if ( ulTicksEnd >= ulTicksStart )
{
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DWT_CYCCNT > ulTicksStart)
if(DWT_CYCCNT > ulTicksStart) // DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
while( DWT_CYCCNT < ulTicksEnd );
}
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
else
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ʱ */
else
{
// <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
return;
return; // <20>Ѿ<EFBFBD><D1BE><EFBFBD>ʱ<EFBFBD><CAB1>ֱ<EFBFBD><D6B1><EFBFBD>˳<EFBFBD>
}
}
else // ulTicksEnd<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/* <20><>ulTicksEnd<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
else
{
// DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(DWT_CYCCNT > ulTicksStart)
/* DWT_CYCCNT<4E><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ */
if(DWT_CYCCNT > ulTicksStart)
{
// <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while( DWT_CYCCNT > ulTicksEnd );
while( DWT_CYCCNT > ulTicksEnd ); // <20>ȴ<EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>
}
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
while( DWT_CYCCNT < ulTicksEnd );
while( DWT_CYCCNT < ulTicksEnd ); // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWT_CYCCNT<4E><54><EFBFBD><EFBFBD>ulTicksEnd
}
}
/**
* @brief <20><><EFBFBD><EFBFBD><EBBCB6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ65535ms
* @param usNms: <20><>ʱ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
* @retval None
*/
void vDelayMs(uint16_t usNms)
{
for(uint16_t i = 0; i < usNms; i++)
{
// delay 1 ms
vDelayUs(1000);
}
}