亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
STM32 rs485 DMA接收沒法進(jìn)入中斷的問題
[打印本頁]
作者:
南國楓火
時(shí)間:
2018-12-4 11:13
標(biāo)題:
STM32 rs485 DMA接收沒法進(jìn)入中斷的問題
用usart2配置485,發(fā)現(xiàn)發(fā)送沒問題,接收的時(shí)候沒法進(jìn)入中斷。這是為什么呢?
void USART2_UART_Init(uint32_t bound)
{
HAL_UART_DeInit(&huart2);
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_USART2_CLK_ENABLE();
__HAL_RCC_DMA1_CLK_ENABLE();
GPIO_Init2.Pin = GPIO_PIN_4; //485_RTS
GPIO_Init2.Mode =GPIO_MODE_AF_PP;
GPIO_Init2.Pull = GPIO_NOPULL;
GPIO_Init2.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Init2.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD,&GPIO_Init2);
GPIO_Init2.Pin = GPIO_PIN_5; //485 TX config
GPIO_Init2.Mode = GPIO_MODE_AF_PP;
GPIO_Init2.Pull = GPIO_NOPULL;
GPIO_Init2.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Init2.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD,&GPIO_Init2);
GPIO_Init2.Pin = GPIO_PIN_6; //485 RX config
GPIO_Init2.Mode = GPIO_MODE_AF_PP;
GPIO_Init2.Pull = GPIO_NOPULL;
GPIO_Init2.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_Init2.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD,&GPIO_Init2); //USART2_GPIO配置
RS485_R;
huart2_dma_rx.Instance=DMA1_Stream5; //RX_DMA_config
huart2_dma_rx.Init.Channel=DMA_CHANNEL_4;
huart2_dma_rx.Init.Direction=DMA_PERIPH_TO_MEMORY;
huart2_dma_rx.Init.PeriphInc=DMA_PINC_DISABLE;
huart2_dma_rx.Init.MemInc=DMA_MINC_ENABLE;
huart2_dma_rx.Init.MemDataAlignment= DMA_MDATAALIGN_BYTE;
huart2_dma_rx.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
huart2_dma_rx.Init.Mode=DMA_NORMAL;
huart2_dma_rx.Init.Priority=DMA_PRIORITY_LOW;
huart2_dma_rx.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
HAL_DMA_Init(&huart2_dma_rx);
__HAL_LINKDMA(&huart2, hdmarx, huart2_dma_rx); //關(guān)聯(lián)USART2和DMA
huart2_dma_tx.Instance=DMA1_Stream6; //TX_DMA_config
huart2_dma_tx.Init.Channel=DMA_CHANNEL_4;
huart2_dma_tx.Init.Direction=DMA_MEMORY_TO_PERIPH;
huart2_dma_tx.Init.PeriphInc=DMA_PINC_DISABLE;
huart2_dma_tx.Init.MemInc=DMA_MINC_ENABLE;
huart2_dma_tx.Init.MemDataAlignment= DMA_MDATAALIGN_BYTE;
huart2_dma_tx.Init.PeriphDataAlignment=DMA_PDATAALIGN_BYTE;
huart2_dma_tx.Init.Mode=DMA_NORMAL;
huart2_dma_tx.Init.Priority=DMA_PRIORITY_HIGH;
huart2_dma_tx.Init.FIFOMode=DMA_FIFOMODE_DISABLE;
HAL_DMA_Init(&huart2_dma_tx);
__HAL_LINKDMA(&huart2, hdmatx, huart2_dma_tx); //關(guān)聯(lián)USART2和DMA
huart2.Instance = USART2;
huart2.Init.BaudRate = bound;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
HAL_UART_Init(&huart2); //串口配置
HAL_NVIC_SetPriority(USART2_IRQn,3,3); //配置USART2的中斷并使能
HAL_NVIC_EnableIRQ(USART2_IRQn);
HAL_NVIC_SetPriority(DMA1_Stream6_IRQn,3,3); //配置DMA通道的中斷并使能
HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);
HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 3, 3);
HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
}
int main(void)
{
HAL_Init();
Sysclk_config();
USART2_UART_Init(38400);
RS485_Send_data(buffer1,4);
HAL_Delay(1000);
HAL_UART_Receive_DMA(&huart2,buffer2,data_length);//打開DMA接收
while(1)
{
if(flag==1)
{
RS485_Send_data(buffer2,data_length);
flag=0;
}
}
}
void USART2_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart2);
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
flag=1;
HAL_Delay(1000);
HAL_UART_Receive_DMA(&huart2,buffer2,data_length);//打開DMA接收
}
復(fù)制代碼
作者:
南國楓火
時(shí)間:
2018-12-5 11:37
問題已解決,還是485管腳配置的問題
作者:
南國楓火
時(shí)間:
2018-12-5 11:37
基本配置要保證不能出錯(cuò)
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1