其实就是用STM32和串口工业屏通信,我写好了数据接收函数,现在是要写发送函数。
但是他给的协议表是这样的:
void Uart1_PutStr1(u8 *p,u8 len)
{
extern UART_TypeDef Uart1_Structure;
if(Uart1_Structure.TxStatus) //如果串口正在发送数据
{
return;
}
Uart1_Structure.TxStrLen=len+6; //发送数据长度有帧头(1)+指令(1)+帧尾(4)
memset(Uart1_Structure.TxBuffer,0,255); //对发送缓冲进行清零
memcpy(&Uart1_Structure.TxBuffer[2],p,len); //将要发送的字符串追加到发送缓冲数组尾部
Uart1_Structure.TxBuffer[0]=0xaa; //加入帧头
Uart1_Structure.TxBuffer[1]=0x51; //发送数据给串口屏指令
Uart1_Structure.TxBuffer[len+2]=0xcc; //帧尾
Uart1_Structure.TxBuffer[len+3]=0x33; //帧尾
Uart1_Structure.TxBuffer[len+4]=0xc3; //帧尾
Uart1_Structure.TxBuffer[len+5]=0x3c; //帧尾
Uart1_Structure.TxStatus=1; //置位串口正在发送数据标志位
USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //打开发送中断
}
我写了这个函数用来发送给串口屏,但是剩下的协议中那些参数变量怎么赋值给数组然具体我实在没想好办法。。
我下的下面这个方式,但是朋友说这样写不对的。。。。
麻烦大家给指导一下。
void Uart1TxDataProcess(void)
{ u8 i ;
Uart1TX_Structure.TxBuffer0[0]=PARunStop;
Uart1TX_Structure.TxBuffer0[6]=PostionADir;
Uart1TX_Structure.TxBuffer0[5]=FaFlagAUp;
Uart1TX_Structure.TxBuffer0[4]=FaFlagADown;
// Uart1TX_Structure.a[0]=//泵运行状态;
Uart1TX_Structure.TxBuffer1[7]=PBRunStop;
// USART_ITConfig(USART1, USART_IT_TXE, ENABLE); //重新使能接fasong中断,准备接收下一个数据
/*___________ 处理要发送的数据 ___________*/
for(i=0; i<26;i++)
{
Uart1_PutStr1(Uart1TX_Structure.TxBuffer0,8);
Uart1_PutStr1(Uart1TX_Structure.TxBuffer1,8);
Uart1_PutStr1(Uart1TX_Structure.TxBuffer2,8);
Uart1_PutStr1(Uart1TX_Structure.TxBuffer3,8);
Uart1_PutStr1(Uart1TX_Structure.TxBuffer4,8);
Uart1_PutStr1(Uart1TX_Structure.TxBuffer5,8);
}
此帖出自
小平头技术问答
一周热门 更多>