使用RS-485串口进行通讯。
1.定义串口接收数据的缓冲区,最大可以保存64个字节u8 RS485_RX_BUF1[64];
2.定义接收发送数据的长度 u8 RS485_RX_CNT;
3.发送数据的函数一般有两个printf和 USART_SendData,这里主要说USART_SendData的使用。printf实现的是格式化字符串,字符串比较有优势。
USART_SendData传递单个字符和指令。
4.给发送方定义一个标记位u32 flags_send1; flags_send1
5.要发送的事件很多定义一个枚举类型的数据,将所有要发送的事件放入枚举类型数据中。
typedef enum
{
E_ERROR = 0,
E_HKEYDN_RESET , //1
E_HKEYUP_RESET1 , //2
E_HKEYUP_EMER1 , //3
E_HKEYUP_PA1 , //4
E_HKEYDN_PTT1 , //5
E_HKEYUP_PTT1 , //6
E_HKEYUP_ATTD1 , //7
E_HKEYUP_PILOT1 , //8
E_CKEYDN_INUSE1 ,//9
};
枚举类型数据将第一个定为1,其他的数据依次加1.
6.定义一个发送事件函数SendCmd(u8 cmd)
flags_send1 |= EBIT(cmd);
UARTSend1();//用来发送数据的函数
定义
#define EBIT(a) (1u<
7.假设要传递E_CKEYDN_INUSE1事件,要实现事件的传递,就应该将事件做参数传入SendCmd(u8 cmd)函数
此时flags_send1 |= EBIT(9)=;由第四点知道flags_send1是一个32位的无符号整型数据。所以flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111
8.(1)UARTSend1()函数
void UARTSend1()
{
int I;
u8 sb[8] = {0x55,0xaa,0x00,0x00,0x00,0x00,0x00,0x00};
u8 rxlen=