STM32 串口DMA方式接收
* Configure USART1 *
USART_Init(USART1, &USART_InitStructure);
/* Enable USART1 DMA Rxrequest */
USART_DMACmd(USART1, USART_DMAReq_Rx, ENABLE);
/* Enable DMA1 Channel5 */
DMA_Cmd(DMA1_Channel5, ENABLE);
/* Enable the USART1 */
USART_Cmd(USART1, ENABLE);
}
// 向串口发送数据
void USART_send(const int8u *pBuf, int8u len)
{
int i;
if(pBuf == NULL)
{
return;
}
// 将数据压入到发送队列
dbgprt("USART_PushBack:");
for(i=0;i
PushBack(*pBuf);
dbgprt("0x%02x ",*pBuf);
pBuf++;
}
dbgprt("/n");
}
// 向发送队列尾部插入一个字节
void PushBack(int8u byte)
{
USART_SndBuf[Tail++]= byte;
if(Tail >= ARRAYSIZE(USART_SndBuf))
Tail = 0;
if(Tail == Head)
Head = Tail+1;
}
// 从发送队列头部取出一个字节
bool PopFront(int8u *byte)
{
if(Head >= ARRAYSIZE(USART_SndBuf))
Head = 0;
if(Head == Tail)
return FALSE;
*byte = USART_SndBuf[Head++];
return TRUE;
}
// 处理接收到的串口数据
void USART_receive(int8u byte)
{
// Treate received data
// Place Code here
// ...
}
// CRC校验
bool CheckCRC(const int8u *str, int8u len, const int8u *crcstr)
{
int8u checkSum;
if(str == NULL || crcstr== NULL)
return FALSE;
GetCRC(str,len,&checkSum);
if(checkSum != *crcstr)
return FALSE;
else
return TRUE;
}
// 获取CRC
bool GetCRC(const int8u *str, int8u len, int8u *crcstr)
{
int8u i;
int8u checkSum;
if(str == NULL || crcstr== NULL)
return FALSE;
checkSum = *str;
for(i=1; i
checkSum ^= *(str+i);
}
*crcstr = checkSum;
return TRUE;
}
STM32串口DMA方 相关文章:
- STM32的串口采用DMA方式发送数据测试(11-19)
- STM32的串口采用DMA方式接收数据测试(11-19)
- STM32串口DMA方式接收数据(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)