STM32F103跑FREERTOS系统USART利用DMA接收数据程序
/***************************************************************** * @brief TaskUsart1.
* @param None
* @retval None
* @brief: Usart1数据缓冲于RxBuffer1
帧之间不允许少于10ms,帧内字节间不允许大于10ms
*******************************************************************/ void TaskUsart1( void *pvParameters )//
{
uint16_ti=0,j=0;
//记录缓存字节数
uint16_toldcnt=MAXUsart1,cnt=0;
uint8_tbuf[MAXUsart1];
//配置
USARTX_Config(USART1,115200);
//DMA
USART1_DR_DMA_Config();
for( ; ; )
{
//查询缓存区当前余量
cnt=(uint32_t)DMA1_Channel5->CNDTR;
//余量无变化
if(cnt==oldcnt)
{
//收到数据
if(i)
{
//检验过
if(Framecheck(buf,i))
//解析
Framedecode(buf);
i=0;
}
}
//余量有变化
else
{
//变化量
cnt=MAXUsart1+oldcnt-cnt;
cnt=cnt%MAXUsart1;
//转移
for(j=0;j buf[i++]=RxBuffer1[((MAXUsart1-oldcnt+j)%MAXUsart1)]; oldcnt=(uint32_t)DMA1_Channel5->CNDTR; } vTaskDelay(10); } }
相关主题