STM8 485发送数据在串口助手中显示全是00 一次发送4个字节,助手收到一个字节并显示00
请问是哪里出了问题呢,是硬件问题还是代码问题?
//IO PB5 接485的DIO PB6接485的DIN PA2接485模块的DE和RE
GPIO_Init(RS_485_PORT, RS_485_PIN, GPIO_MODE_OUT_PP_LOW_SLOW);
void UART1_485_Init(void)
{
UART1_Init((u32)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
UART1_Cmd(ENABLE);
}
void UART1_485_Send_Byte(u8 byte)
{
UART1_SendData8(byte);//发送8位数据
while(UART1_SR_TC==0);//待发送完成
//while( UART1_GetFlagStatus(UART1_FLAG_TC)!=RESET);
}
void UART1_485_Send_Str(void)
{
u8 i=0;
RS_485_DIR_H;
Delay_ms(2);
for(i=0;i<4;i++)
{
UART1_485_Send_Byte(0x61+i);
}
Delay_ms(2);
RS_485_DIR_L;
}
}
https://blog.csdn.net/m0_65835239/article/details/130265709
由此文得到答案
1、时钟选择的对不对,
2、GPIO口的TX引脚应该设置为“复用推挽输出”
3、中断初始化函数也不可加
4、硬件方面RXT、TXD电路接反。一直出现00的时候就要怀疑是不是线接反了。
后换了TX和RX后收发正常了
【以下回答由 GPT 生成】
可能出现的原因是硬件连接或代码实现上存在问题。解决办法如下:
确保接地线连接良好。
代码检查:
检查是否正确设置RS_485_DIR_H和RS_485_DIR_L宏定义。
串口助手设置检查:
如果以上检查和调整都没有解决问题,可能需要进一步排查硬件和软件的问题。
【相关推荐】
这颗单片机没有接触过,不过从你写的代码看,明显有问题
while(UART1_SR_TC==1);//待发送完成
UART1_SR_TC=0;
按这段代码的意思,应该是UART1_SR_TC==1的情况下,是没有发送完的一个标志,那发送完成之后UART1_SR_TC就会变成0,但如果是这样,那下面那句UART1_SR_TC=0;不就是多余的吗?所以我怀疑你是把标志状态的判断弄错了。