#include "Key.h" /* ---------------------------------------------------------------------------- * @breif:发送按键信息给从机 * @input:NONE * @retval:NONE */ void Send_Key_Inf(void) { uint16_t crc16=0; //校验码 if(sending_flag[USART1_Locat] == 0) { //没有报文正在发送 if(Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0) { //有按键按下 Txbuf[0] = SLAVE_ADDRESS; //装置地址 Txbuf[1] = MOD_WRITE_M_REGISTER; Txbuf[2] = (uint8_t)(ADR_KEY_START>>8); Txbuf[3] = (uint8_t)(ADR_KEY_START); Txbuf[4] = 0x00; Txbuf[5] = 0x02; Txbuf[6] = 0x04; Txbuf[7] = (uint8_t)(Dealwith.Key1_REG>>8); Txbuf[8] = (uint8_t)(Dealwith.Key1_REG); Txbuf[9] = (uint8_t)(Dealwith.Key2_REG>>8); Txbuf[10] = (uint8_t)(Dealwith.Key2_REG); crc16 = CRC16(Txbuf,11); Txbuf[11] = (uint8_t)(crc16); Txbuf[12] = (uint8_t)(crc16>>8); Txlen = 13; //发送数据 DMA_Usart1_Send(Txbuf,Txlen); } } }
时间: 2023-10-23 20:57:40 浏览: 134
这段代码是一个发送按键信息给从机的函数。根据代码的逻辑,当有按键按下时,将会发送相应的按键信息给从机。
函数中的变量`Txbuf`是用来存储待发送的数据帧的缓冲区。首先,函数会设置装置地址、功能码、起始地址和寄存器数量等信息,然后将按键值存储在`Txbuf`中相应的位置。
接下来,函数使用CRC16校验算法计算校验码,并将校验码存储在`Txbuf`的最后两个字节中。最后,通过DMA方式将数据发送出去。
请注意,此处的代码仅为发送部分的逻辑,整个通信过程还需要接收从机的响应并进行相应的处理。如果您需要完整的通信过程代码,还需要实现接收部分的逻辑。
如果您对具体的代码实现有任何疑问,请随时提问。
阅读全文