历程中是UART1,但改为UART0后为什么就是不好使,是哪里还需要配置吗,引脚什么的都改了,线也没接错,有没有大哥救救孩子 - -
#include "CH58x_common.h"
uint8_t TxBuff[] = "This is a tx exam\r\n";
uint8_t RxBuff[100];
uint8_t trigB;
/*********************************************************************
* @fn main
*
* @brief 主函数
*
* @return none
*/
int main()
{
uint8_t len;
SetSysClock(CLK_SOURCE_PLL_60MHz);
/* 配置串口1:先配置IO口模式,再配置串口 */
GPIOB_SetBits(bTXD0);
GPIOB_ModeCfg(bRXD0, GPIO_ModeIN_PU); // RXD-配置上拉输入
GPIOB_ModeCfg(bTXD0, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平
UART0_DefInit();
#if 1 // 测试串口发送字符串
UART0_SendString(TxBuff, sizeof(TxBuff));
#endif
#if 0 // 查询方式:接收数据后发送出去
while(1)
{
len = UART0_RecvString(RxBuff);
if(len)
{
UART0_SendString(RxBuff, len);
}
}
#endif
#if 1 // 中断方式:接收数据后发送出去
UART0_ByteTrigCfg(UART_1BYTE_TRIG);
trigB = 1;
UART0_INTCfg(ENABLE, RB_IER_RECV_RDY | RB_IER_LINE_STAT);
PFIC_EnableIRQ(UART0_IRQn);
#endif
while(1);
}
/*********************************************************************
* @fn UART1_IRQHandler
*
* @brief UART1中断函数
*
* @return none
*/
__INTERRUPT
__HIGH_CODE
void UART0_IRQHandler(void)
{
volatile uint8_t i;
switch (UART0_GetITFlag())
{
case UART_II_LINE_STAT: // 线路状态错误
{
UART0_GetLinSTA();
break;
}
case UART_II_RECV_RDY: // 数据达到设置触发点
for(i = 0; i != trigB; i++)
{
RxBuff[i] = UART0_RecvByte();
UART0_SendByte(RxBuff[i]);
}
break;
case UART_II_RECV_TOUT: // 接收超时,暂时一帧数据接收完成
i = UART0_RecvString(RxBuff);
UART0_SendString(RxBuff, i);
break;
case UART_II_THR_EMPTY: // 发送缓存区空,可继续发送
break;
case UART_II_MODEM_CHG: // 只支持串口0
break;
default:
break;
}
}
真就什么都没改 - -
你好,将这里的debug改成0。
您好,我试了下,还是不行
将你的代码拷贝并修改debug=0,可以进行收发。
你可以检查一下串口硬件是否接线良好,检查一下串口0的c文件是否include。
如果收发还是有问题,请发送邮件至邮箱lpc@wch.cn,我们这里进行查看。