经常我们会用到空闲中断IDLE,但是空闲中断默认一个BIT接收不到就是超时,而在超时中断中,超时时间是可以自己设定的,
超时时间根据波特率以及超时规定的字节个数来确定。此处的超时时间是 40 * (1/19200).
#define USART_ReceiverTimeOut 40
void DMA_Configuration(void)
{
DMA_InitTypeDef DMA_InitStructure;
/* DMA1 Channe3 (triggered by UART1 Rx event) Config */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //启动DMA时钟
DMA_DeInit(DMA1_Channel3); //DMA1通道3配置
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART1->RDR); //外设地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RecvBuf; //内存地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMA传输方向单向:SRC 外设到内存 DST内存到外设
DMA_InitStructure.DMA_BufferSize = MODBUS_BUF_LEN; //设置DMA在传输时缓冲区的长度
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //设置DMA的外设递增模式,一个外设
DMA_InitStructure.DMA_MemoryInc