传输单个字节:
void USART_Transmit(unsigned char data)
{
unsigned int i = 0;
// 等待发送缓冲区为空
while (!(UCSRA & (1 << UDRE)))
{
wdt_reset();
if (++i > 20000)
break;
}
// 发送数据
UDR = data;
}
发送字符串:
void USART_TransmitString(const char *str)
{
while (*str)
{
USART_Transmit(*str++);
}
}
单AT指令
// 发送UART指令
void Send_AT_UART_Command(int num)
{
switch (num)
{
case 0:
USART_TransmitString("AT+UART=0\r\n");
break;
case 1:
USART_TransmitString("AT+UART=1\r\n");
break;
case 2:
USART_TransmitString("AT+UART=2\r\n");
break;
case 3:
USART_TransmitString("AT+UART=3\r\n");
break;
case 4:
USART_TransmitString("AT+UART=4\r\n");
break;
case 5:
USART_TransmitString("AT+UART=5\r\n");
break;
case 6:
USART_TransmitString("AT+UART=6\r\n");
break;
default:
break;
}
}
多AT指令
// AT初始化配置
void AT_Init(void)
{
// 10ms进行一次
if (Get(timeBase, AT_TM_BS))
{
Clear(timeBase, AT_TM_BS);
switch (AT_NUM)
{
case 0:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// 设置蓝牙名称
Send_AT_MAC_Command(0);
}
AT_NUM++;
break;
case 1:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// MAC表增加1号机
AT_MAC_List(1);
}
AT_NUM++;
break;
case 2:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// MAC表增加E01
AT_MAC_List(2);
}
AT_NUM++;
break;
case 3:
// 确保不发送数据
ATsendStart = 0;
// 等待缓冲区为空
if (getb(UCSRA, UDRE))
{
// 自动重连mac表增加3号从机
AT_MAC_List(3);
AT_NUM++;
}
break;
case 4:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 自动重连mac表增加4号从机
AT_MAC_List(4);
AT_NUM++;
}
break;
case 5:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 开启自动重连
Send_AT_List_Command(1);
AT_NUM++;
}
break;
case 6:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 设置功率
Send_AT_Power_Command(4);
AT_NUM++;
}
break;
case 7:
// 确保不发送数据
ATsendStart = 0;
if (getb(UCSRA, UDRE))
{
// 开启自动重连列表
// Send_AT_List_Command(1);
AT_NUM++;
}
break;
case 8:
// UDR = 0xaa;
AT_NUM++;
ATsendStart = 1;
ATReceiveStart = 1;
if (getb(UCSRA, UDRE))
{
// 重启BLE
Send_AT_REBOOT_Command();
}
break;
case 9:
AT_NUM = 9;
ATsendStart = 1;
ATReceiveStart = 1;
break;
default:
ATsendStart = 0;
break;
}
}
}