CH582串口問(wèn)題

我目前使用 ch32v203 工作正常。 附件是 ch32v203 的 uart 代碼,其中在發(fā)送完美運(yùn)行的新字節(jié)之前檢查傳輸完成標(biāo)志。 但是當(dāng)使用ch582時(shí)我發(fā)現(xiàn)很難發(fā)送。 UART0_SendString 函數(shù)工作正常,但如果您立即使用 UART0_SendByte,則并非所有完整字符串都從先前的 sendstring 函數(shù)傳輸。 我找不到像 32v203 中那樣的傳輸完成標(biāo)志。

請(qǐng)為此建議一個(gè)代碼片段。



//CH32V203?code
void?USART1_PrintS(u8?*uart_text)
{
????while(*uart_text)???????????????????????????????????????????????????????????//?While?not?end?of?text
????{
????????while(USART_GetFlagStatus(USART1,?USART_FLAG_TC)?==?RESET);
????????USART_SendData(USART1,*uart_text);
????????uart_text++;
????}
}
//CH582?code
void?UART0_SendString(uint8_t?*buf,?uint16_t?l)
{
????uint16_t?len?=?l;

????while(len)
????{
????????if(R8_UART0_TFC?!=?UART_FIFO_SIZE)
????????{
????????????R8_UART0_THR?=?*buf++;
????????????len--;
????????}
????}
}
//如果所有?UART0_SendByte?都被刪除,則?sendstring?會(huì)正確打印所有字符,否則不會(huì)。

UART0_SendString("Hello?World\r\n",13);
UART0_SendByte('O');
UART0_SendByte('K');
UART0_SendByte(13);
UART0_SendByte(10);

您能否發(fā)送一個(gè)代碼片段以在沒(méi)有任何 FIFO 的情況下使用? 我還沒(méi)有測(cè)試接收部分,我需要中斷每個(gè)字節(jié)(標(biāo)準(zhǔn) uart 兼容)。


您好,F(xiàn)IFO方式可以緩存數(shù)據(jù)來(lái)緩解收發(fā)包壓力,是推薦使用的。

UART0_SendByte是直接往R8_UART0_THR寄存器中填數(shù)據(jù);UART0_SendString是往FIFO中填寫(xiě)數(shù)據(jù),F(xiàn)IFO中的內(nèi)容會(huì)再經(jīng)由R8_UART0_THR發(fā)出。UART0_SendString調(diào)用完后,有一部分還未發(fā)出,此時(shí)直接填寫(xiě)UART0_SendByte會(huì)導(dǎo)致數(shù)據(jù)丟失。

針對(duì)您反饋的問(wèn)題,可以在UART0_SendString調(diào)用后加一行代碼用于發(fā)包等待。

while(R8_UART0_TFC);

在收包方向“中斷每個(gè)字節(jié)”也可以用FIFO緩存的方式實(shí)現(xiàn),調(diào)用UART0_ByteTrigCfg將觸發(fā)字節(jié)數(shù)配置為1即可逐字節(jié)中斷。

如果不想使用任何FIFO功能,可以在UART0_DefInit中清零R8_UART0_FCR寄存器。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

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