CH32V208W USART RTS信號不能配置為RS485模式控制功能

1、當前使用參考代碼為 USART_HardwareFlowControl中的示例,當量進行了修改

? ? while(1){


? ? ? ? int i;

? ? ? ? for(i=0;i<10;i++){

? ? ? ? ? ? USART_SendData(USART1, 0x55+i);

? ? ? ? ? ? while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

? ? ? ? }

? ? ? ? USART_SendData(USART1, 0x55);

? ? ? ? while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

? ? ? ? Delay_Ms(10);

? ? }

2、測試發(fā)現(xiàn),RTS信號只能在發(fā)送之前保持一下短暫的高信號,平時為低電壓,與使用意圖不一至。?并不能配出真正的RS485模式。(也就是平時靜態(tài)是RTS為低電平,當存在數(shù)據(jù)發(fā)送時一直處理高電平,再等待發(fā)送結(jié)束后恢復為低電平)

image.png

3、疑問

? ?1)、V208是否并不支持RS485模式的流控控制方式?

? ?2)、如果要實際這個功能是否就意味著只能對發(fā)送緩沖區(qū)進行監(jiān)測,來實現(xiàn),而不能完全基于硬件來實現(xiàn)這個方案?

? ?3)、當前RM資料中沒有解釋,也沒有相應的說明,望給于解答。


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

使用GPIO控制模式會差一個字節(jié),如果改成TC來判斷效果一樣并且很容易發(fā)送一幀后就卡住了。

有什么辦法判斷最后一個字節(jié)是移位發(fā)送正常結(jié)束了。


void USART2_data_send(uint32_t uart_index,uint8_t *data,uint32_t dataLen){

? ? int TxCnt1;

? ? TxCnt1=0;


? ? GPIO_SetBits(GPIOA, GPIO_Pin_1); //RTS


? ? while(TxCnt1 < dataLen)

? ? {

? ? ? ? USART_SendData(USART2, data[TxCnt1++]);

? ? ? ? while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET) /* waiting for sending finish */

? ? ? ? {

? ? ? ? }

? ? }


? ? while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

? ? GPIO_ResetBits(GPIOA, GPIO_Pin_1);

}



補充上面2樓的圖片,對USART 狀態(tài)寄存器(USARTx_STATR)進行查訊,使用TC信號的結(jié)果與測量到的情況一至,懷疑情況是,上面寄存器指示的是緩沖區(qū)的空,而并不是真的移位寄存器中也已經(jīng)發(fā)送完成。

1727052659195364.png


image.png


您好,關于485通信,建議使用GPIO拉高拉低表示發(fā)送或者接收模式,RTS只在接收寄存器滿時設置為高電平。通過IO配置發(fā)送接收可參考一下下圖配置例程

image.png


你們這個TC的寄存器不能反應移位寄存器中的內(nèi)容是否為空,對不對?我看了ST RM的資料,都很明確的表示,TC信號是正常的。從時序圖上看是可以通過這個信號來做為發(fā)送的結(jié)束。


您好,TC為發(fā)送完成標志,可以反應移位寄存器為空的,你可以按照我回復截圖程序測試一下,你在3樓貼的2樓測試程序的圖,你可以將對TXE標志位的判斷按照我貼的代碼全部改為TC試一下,我這邊測試是沒問題的,如下圖

image.png


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

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