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);
}
}

View File

@@ -11,15 +11,15 @@
// 0xE000EDFC DEMCR RW Debug Exception and Monitor Control Register.
#define DEMCR ( *(__IO uint32_t *)0xE000EDFC )
#define TRCENA ( 0x01 << 24) // DEMCR的DWT使能位
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 //MCU调试模块控制寄存器详细内容参考《stm32中文参考手册》调试支持DBG章节747页
#define TRCENA ( 0x01 << 24) // DEMCR的DWT使能位
#define DBGMCU_CR *(__IO uint32_t *)0xE0042004 // MCU调试模块控制寄存器详细内容参考《stm32中文参考手册》调试支持DBG章节747页
// 0xE0001000 DWT_CTRL RW The Debug Watchpoint and Trace (DWT) unit
#define DWT_CTRL ( *(__IO uint32_t *)0xE0001000 )
#define DWT_CTRL_CYCCNTENA ( 0x01 << 0 ) // DWT的SYCCNT使能位
#define DWT_CTRL_CYCCNTENA ( 0x01 << 0 ) // DWT的SYCCNT使能位
// 0xE0001004 DWT_CYCCNT RW Cycle Count register,
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004) // 显示或设置处理器的周期计数值
#define DWT_CYCCNT ( *(__IO uint32_t *)0xE0001004 ) // 显示或设置处理器的周期计数值
//#define DWT_DELAY_mS(mSec) DWT_DELAY_uS(mSec*1000)

View File

@@ -12,7 +12,7 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
if (xUsartId == USART1)
{
/* code */
RCC_APB2PeriphClockCmd(USART1_GPIO_CLOCK,ENABLE);
RCC_APB2PeriphClockCmd(USART1_GPIO_CLOCK, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
@@ -26,15 +26,15 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART1,&USART_InitStructure);
USART_Init(USART1, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
@@ -44,11 +44,11 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // <20><>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD>ã<EFBFBD><C3A3>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
NVIC_Init(&NVIC_InitStructure); // ָ<><D6B8>NVIC_InitStructure<72>ĵ<EFBFBD>ַ
USART_Cmd(USART1,ENABLE);
USART_Cmd(USART1, ENABLE);
} else if (xUsartId == USART2)
{
/* code */
RCC_APB2PeriphClockCmd(USART2_GPIO_CLOCK,ENABLE);
RCC_APB2PeriphClockCmd(USART2_GPIO_CLOCK, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
@@ -60,15 +60,15 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART2,&USART_InitStructure);
USART_Init(USART2, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
@@ -82,7 +82,7 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
} else if (xUsartId == USART3)
{
/* code */
RCC_APB2PeriphClockCmd(USART3_GPIO_CLOCK,ENABLE);
RCC_APB2PeriphClockCmd(USART3_GPIO_CLOCK, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
@@ -95,15 +95,15 @@ void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate)
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = ulBaudrate; // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD>USART_Init<69><74><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>9600<30><30>Ӧ<EFBFBD>ķ<EFBFBD>Ƶϵ<C6B5><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>BRR<52>Ĵ<EFBFBD><C4B4><EFBFBD>
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3>ͽ<EFBFBD><CDBD><EFBFBD>ģʽ
USART_InitStructure.USART_Parity = USART_Parity_No; // <20><>У<EFBFBD><D0A3>λ
USART_InitStructure.USART_StopBits = USART_StopBits_1; // һλֹͣλ
USART_InitStructure.USART_WordLength = USART_WordLength_8b; // <20>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҪУ<D2AA><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ѡ<EFBFBD><D1A1>
USART_Init(USART3,&USART_InitStructure);
USART_Init(USART3, &USART_InitStructure);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4>ڵIJ<DAB5>ѯģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD><EFBFBD><EFBFBD>NVIC
USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // ѡ<><D1A1>RXNE<4E><45><EFBFBD>ж<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXNE<4E><45>־λ<D6BE><CEBB>1<EFBFBD><31><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>NVIC<49><43><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); // <20><><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>4Ϊ4bit<69><74>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>0bit<69><74>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0-15<31><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FreeRTOSû<53><C3BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><E0B5B1><34><CEBB>ռ<EFBFBD><D5BC><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><30><CEBB>Ӧ<EFBFBD><D3A6><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
NVIC_InitTypeDef NVIC_InitStructure; // <20><>ʼ<EFBFBD><CABC>NVIC<49><43>USART1ͨ<31><CDA8>
@@ -220,13 +220,12 @@ void USART1_IRQHandler(void)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART1);
#if (USE_SYSTEM == NONE)
#elif (USE_SYSTEM == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart1IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#elif (USE_SYSTEM == OSAL)
#endif
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
@@ -244,13 +243,12 @@ void USART2_IRQHandler(void)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART2);
#if (USE_SYSTEM == NONE)
#elif (USE_SYSTEM == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart2IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#elif (USE_SYSTEM == OSAL)
#endif
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
}
@@ -268,13 +266,12 @@ void USART3_IRQHandler(void)
{
/* code */
uint8_t ulRxData = (uint8_t)USART_ReceiveData(USART3);
#if (USE_SYSTEM == NONE)
#elif (USE_SYSTEM == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(xQueueUsart3IrqHdlr, &ulRxData, &xHigherPriorityTaskWoken);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD> */
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
#elif (USE_SYSTEM == OSAL)
#endif
USART_ClearITPendingBit(USART3, USART_IT_RXNE);
}

View File

@@ -1,7 +1,7 @@
#ifndef __USART_H__
#define __USART_H__
#define USE_SYSTEM FREERTOS
#define USE_RTOS FREERTOS
#define NONE 0
#define FREERTOS 1
#define OSAL 2
@@ -21,11 +21,10 @@
#define USART3_GPIO_PIN_TX GPIO_Pin_10
#define USART3_GPIO_PIN_RX GPIO_Pin_11
#if (USE_SYSTEM == NONE)
#elif (USE_SYSTEM == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
#include "FreeRTOS.h"
#include "queue.h"
#elif (USE_SYSTEM == OSAL)
#endif
#include "stm32f10x.h" // Device header
@@ -33,12 +32,11 @@
#include <stdarg.h>
#include <string.h>
#if (USE_SYSTEM == NONE)
#elif (USE_SYSTEM == FREERTOS)
#if (USE_RTOS == NONE)
#elif (USE_RTOS == FREERTOS)
extern QueueHandle_t xQueueUsart1IrqHdlr;
extern QueueHandle_t xQueueUsart2IrqHdlr;
extern QueueHandle_t xQueueUsart3IrqHdlr;
#elif (USE_SYSTEM == OSAL)
#endif
void vUsartInit(USART_TypeDef *xUsartId, uint32_t ulBaudrate);