个人电脑控制单片机,主要通过以下步骤:
1)建立个人电脑和单片机的通信连接
普通的单片机通常有UART、SPI、IIC、USB等通信模块。
和电脑通信最常用的是UART,可以有两种方式和电脑建立连接(现在的笔记本电脑很少有支持RS232的DB9接口,所以需要使用USB转TTL,或者USB转485的数据线):
从网上购买USB转TTL的串口线:
通过UART-TTL,将单片机的串口TX,RX引出,加限流保护电阻之后,将串口线的地和单片机的地接到一起,将单片机的串口TX接到串口线的RX,将单片机的串口RX接到串口线的TX。
还可以通过RS485总线与电脑连接;
仍然从网上购买USB转RS485的数据线:
RX,TX,以及发送/接收使能控制脚如下图连接至485芯片(如MAX485),将单片机的串口转成485总线。
除了串口之外,还可以从网上购买支持UART接口的以太网模块或者wifi模块。
通过以太网模块,或者wifi模块内置的TCP/IP协议栈,采用TCP/IP通信与个人电脑建立连接。
单片机与模块之间的控制(如初始化、建立TCP客户端/服务端,发送/接收TCP/UDP报文等)可以通过标准的AT指令实现。
2)制定协议以及编写软件
如果是通过RS485连接,建议采用MODBUS通信协议。
个人自定义协议,我通常采用如下格式:
1字节帧头,2字节数据长度,1字节命令字,n字节payload,1字节crc8校验
包括单片机软件和上位机软件,
不管是串口/RS485通信,还是TCP/IP通信,都是单片机串口的通信程序。
包括发送和接收程序,一般开辟发送/接收两块缓存,在串口中断接收程序中,将串口接收到的数据放在环行队列,在主程序中根据协议从环行队列中取出数据进行解析,当解析到有效数据之后,再抛给应用层程序进行相关处理(如IO口控制,IO口读取,FLASH读写等)。
当应用层需要发送数据时,请求串口发送,将数据填入发送缓存,之后串口程序串口发送中断程序中将数据逐字节送入串口发送寄存器。
以下是我在产品中实际使用的串口程序。
#include "Uart.h"
#include "IO.h"
#include "crc.h"
#include "Timer.h"
#include "Strs.h"
#include "WiFi.h"
#define P_UA_TX_P GPIOA
#define P_UA_TX_V 9
#define P_UA_RX_P GPIOA
#define P_UA_RX_V 10
#define UART_WIFI ((USART_TypeDef *) USART1_BASE)
STRUARecType g_ua_stRecRegs;
STRUASendType g_ua_stSendRegs;
#define ENABLE_UART_TX() {\
UART_WIFI->CR1 |= USART_CR1_TXEIE;\
}
//禁止发送中断,使能接收
#de