請問如果我想實(shí)現(xiàn)CH554串口UART1接收,發(fā)送引腳作為普通IO口。串口接收完成后,控制TX腳拉高拉低,再接收,再控制TX腳拉高拉低。。。。如此循環(huán)。
能否實(shí)現(xiàn)這樣的功能?
如果可以實(shí)現(xiàn),需要注意什么?
謝謝??!
請問如果我想實(shí)現(xiàn)CH554串口UART1接收,發(fā)送引腳作為普通IO口。串口接收完成后,控制TX腳拉高拉低,再接收,再控制TX腳拉高拉低。。。。如此循環(huán)。
能否實(shí)現(xiàn)這樣的功能?
如果可以實(shí)現(xiàn),需要注意什么?
謝謝??!
1、可以實(shí)現(xiàn)的,在UART1的RX功能正常的時候,操作P1寄存器可以正常的控制P17端口的高低電平。
2、直接正常操作P17位就可以
感謝!我發(fā)現(xiàn)串口接收處理完成后,調(diào)用mDelaymS()延時120ms,但是上位機(jī)一直以100ms發(fā)送數(shù)據(jù),有概率造成串口死掉,請問有發(fā)現(xiàn)過這種問題嗎?謝謝!
#include "..\Public\CH554.H"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
#include "..\Public\Debug.H"
#include "./GPIO/GPIO.h"
#include "UART_TEST.h"
#include "UART1.H"
#include "stdio.h"
#include
#pragma? NOAREGS
UINT8? ?cmmnctRcvDataOffset;
UINT8? ?gCmmnRevDataBuf[COM_REC_PACK_LENGTH];//接收數(shù)據(jù)緩存
/*********************************************************************
?* @fn? ? ? UartRecIRQHandler
?*
?* @brief? ?串口中斷處理函數(shù)
?*
?* @param? ?none
?*
?* @return? none
?*/
void UartRecIRQHandler(UINT8 _recdata)
{
? ? if(cmmnctRcvDataOffset >= COM_REC_PACK_LENGTH)
? ? {
? ? ? ? cmmnctRcvDataOffset = 0;
? ? }
? ? gCmmnRevDataBuf[cmmnctRcvDataOffset++] = _recdata;
? ? if(cmmnctRcvDataOffset == 2 && (gCmmnRevDataBuf[0] != CMMNCT_HEADER1 || gCmmnRevDataBuf[1] != CMMNCT_HEADER2))
? ? {
? ? ? ? cmmnctRcvDataOffset = 0;
? ? }
}
/*********************************************************************
?* @fn? ? ? CommRevPacket
?*
?* @brief? ?接收數(shù)據(jù)處理函數(shù)
?*
?* @param? ?none
?*
?* @return? none
?*/
UINT8 CommRevPacket(void)
{
? ? if(cmmnctRcvDataOffset >= 32)
? ? {
? ? ? ? EA = 0;
? ? ? ? cmmnctRcvDataOffset = 0;
? ? ? ? EA = 1;
? ? ? ? mDelaymS(120);
? ? ? ? printf("rec\n");
? ? }
? ??
? ? return 0;
}
/*********************************************************************
?* @fn? ? ? PeripheralUartInit
?*
?* @brief? ?串口初始化
?*
?* @param? ?none
?*
?* @return? none
?*/
void PeripheralUartInit(void)
{
? ? UART1Init();
}
我在串口例程中加入上面的代碼,CommRevPacket在main里輪詢,UartRecIRQHandler()在串口中斷處理。上位機(jī)一直以100ms發(fā)送數(shù)據(jù),這樣串口就會死掉,發(fā)送沒有反應(yīng)了,工程已經(jīng)上傳,在最上方
在您的代碼基礎(chǔ)上加上了一些打印信息,電腦端串口模塊的TX接P1.6RXD1,電腦端串口模塊RX接P3.1監(jiān)控打印信息
電腦端發(fā)送一個字節(jié)數(shù)據(jù)可以收回7個字節(jié)的打印信息。
電腦端配置成100ms發(fā)送一個字節(jié)數(shù)據(jù),發(fā)送752字節(jié)數(shù)據(jù),收到了5264字節(jié)打印信息,同時會看打印信息,數(shù)據(jù)接收全部正確。串口接收、中斷功能本身功能應(yīng)該是沒有問題的,可以再查一下應(yīng)用代碼邏輯是否有問題。