糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > stm32 串口通信数据移位寄存器_STM32串口接RS485丢码问题已解决*_*

stm32 串口通信数据移位寄存器_STM32串口接RS485丢码问题已解决*_*

时间:2020-12-03 17:38:26

相关推荐

stm32 串口通信数据移位寄存器_STM32串口接RS485丢码问题已解决*_*

static void Rs4851Send(unsigned char *p,unsigned char length)

{

///TIM_SetCounter(TIM(RS4851_TIM_NO),0X01); //如果没有这句,下面延时程序会产生一帧数所结束中断(但实际数据还没发出去)

//现在可以不要了,因为在外部中断服备程序中添加,主要是那个原因

EnableRs4851Tx(); //0903 //使能485发送

DelayMs(2);

///TIM_SetCounter(TIM(RS4851_TIM_NO),0X01); //如果没有这句,下面延时程序会产生一帧数所结束中断(但实际数据还没发出去)

//现在可以不要了,因为在外部中断服备程序中添加,主要是那个原因

Rs4851Mac.mRs485TxCount = length;

//Rs4851Mac.mPRs485Send = p;

ptmp = p;

USART_SendData(USART(RS4851_TX_PIN), *ptmp++);//*(Rs4851Mac.mPRs485Send)++);

USART_ITConfig(USART(RS4851_TX_PIN), USART_IT_TXE, ENABLE); //开始为发送中断

}

static void Rs4851SendIsr(void)

{

if(USART_GetITStatus(USART(RS4851_TX_PIN), USART_IT_TXE) != RESET)

{

Rs4851Mac.mRs485TxCount--;

if(Rs4851Mac.mRs485TxCount>0) //如果大于0,则数据没发送完,

{

USART_SendData(USART(RS4851_RX_PIN), *ptmp++);//*(Rs4851Mac.mPRs485Send)++);

}

if(Rs4851Mac.mRs485TxCount==1) //如果是最后一个数据

{

USART_ITConfig(USART(RS4851_RX_PIN), USART_IT_TXE, DISABLE);//禁止发送中断

USART_ITConfig(USART(RS4851_TX_PIN), USART_IT_TC, ENABLE); //开启发送完成中断

}

}

if(USART_GetITStatus(USART(RS4851_TX_PIN), USART_IT_TC) != RESET) //如果是发送完成中断,

{

USART_ITConfig(USART(RS4851_RX_PIN), USART_IT_TC, DISABLE);//说明是最后一个数据,

delay_us(10); //因为是等待发送完成,所以可以延时的时间短些

DisableRs4851Tx(); //禁止485发送

}

TIM_SetCounter(TIM(RS4851_TIM_NO),0X01); //如果没有这句,下面延时程序会产生一帧数所结束中断(但实际数据还没发出去)

//现在可以不要了,因为在外部中断服备程序中添加,主要是那个原因

}

如果觉得《stm32 串口通信数据移位寄存器_STM32串口接RS485丢码问题已解决*_*》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。