ch32v307RCT6 485通信問題

我芯片使用內(nèi)部時鐘72Mhz 主頻 ,使用環(huán)境:DMA1_Channel5 ?通道接收usart1 , DMA1_Channel4 通道發(fā)送Usart1,硬件RTS ,串口空閑中斷開啟,485芯片 max3485,在接收數(shù)據(jù)時usart1只有第一個byte能正確接收,其它數(shù)據(jù)都不正確。在用DMA發(fā)送時完全接收不到數(shù)據(jù)。請問這個情況怎么處理。軟件控制收發(fā)嗎

icon_rar.gifradar.rar

程序源碼


您好,附件為CH32V307 串口1DMA收發(fā)的例程,同樣使用了串口空閑中斷,你可以參考一下。此外注意一下,若ld文件中將FLASH和RAM大小配置為288+32的話,需要通過ISP工具下載配置一下,否則建議用256+64,不然程序可能會有問題。后續(xù)若有問題,可通過郵箱和我溝通(lzs@wch.cn)。

WCHISPTool工具下載鏈接:http://www.findthetime.net/downloads/WCHISPTool_Setup_exe.html?

icon_rar.gifCH32V307 USART1_DMA收發(fā).zip

image.png

圖1

image.png

圖2


DMA通信這個配置我這邊用其它的端口測試都沒有問題。但就485通信不正常

配置沒有奇偶效驗,但偶效驗能收到數(shù)據(jù),但發(fā)不出來數(shù)據(jù)


? ? DMA_Channel_TypeDef *channel, uint8_t *adsRx, uint32_t size) {

? ? GPIO_InitTypeDef GPIO_InitStructure = { 0 };

? ? USART_InitTypeDef USART_InitStructure = { 0 };

? ? DMA_InitTypeDef DMA_InitStructure = { 0 };

? ? NVIC_InitTypeDef NVIC_InitStructure = { 0 };


? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;


? ? USART_InitStructure.USART_BaudRate = baudrate;

? ? USART_InitStructure.USART_WordLength = USART_WordLength_8b;

? ? USART_InitStructure.USART_StopBits = USART_StopBits_1;

? ? USART_InitStructure.USART_Parity = USART_Parity_No;

? ? USART_InitStructure.USART_HardwareFlowControl =

? ? USART_HardwareFlowControl_None;

? ? USART_InitStructure.USART_Mode = USART_Mode_Rx;


? ? DMA_DeInit(channel);

? ? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32) (&usart->DATAR); /* USART2->DATAR:0x40004404 */

? ? DMA_InitStructure.DMA_MemoryBaseAddr = (u32) adsRx;

? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;

? ? DMA_InitStructure.DMA_BufferSize = size;

? ? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

? ? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

? ? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

? ? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;

? ? DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;

? ? DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;

? ? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;


? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;


?RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA,

? ? ? ? ? ? ? ? ENABLE);

? ? ? ? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

? ? ? ? /* USART1 TX-->A.9? ?RX-->A.10 */

? ? ? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

? ? ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

? ? ? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? ? ? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

? ? ? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? ? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; /* RTS-->A.12 */

? ? ? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? ? ? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? ? ? USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

? ? ? ? USART_InitStructure.USART_HardwareFlowControl =

? ? ? ? USART_HardwareFlowControl_RTS;


? ? ? ? NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

? ? ? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

? ? ? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;


? ? USART_ITConfig(usart, USART_IT_IDLE, ENABLE);

? ? USART_Init(usart, &USART_InitStructure);


? ? DMA_Init(channel, &DMA_InitStructure);

? ? DMA_Cmd(channel, ENABLE);

? ? NVIC_Init(&NVIC_InitStructure);


? ? ? ? //配置發(fā)送DMA

? ? ? ? DMA_DeInit(DMA1_Channel4);

? ? ? ? DMA_InitStructure.DMA_PeripheralBaseAddr = (u32) (&USART1->DATAR); /* USART2->DATAR:0x40004804 */

? ? ? ? DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) USART_TX_BUF;

? ? ? ? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

? ? ? ? DMA_InitStructure.DMA_BufferSize = USART_TEC_LEN;

? ? ? ? DMA_Init(DMA1_Channel4, &DMA_InitStructure);

? ? ? ? USART_DMACmd(usart, USART_DMAReq_Rx | USART_DMAReq_Tx, ENABLE);


1666185962120803.png

1666185963183053.png

1666185963193953.png

1666185963147605.png

。


您好,您可以嘗試由串口引腳直接讀取串口打印的輸出,檢查打印內(nèi)容是否正確。如果還有問題,可以發(fā)送郵件至lbw@wch.cn進一步溝通。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频