配置下发的驱动基本完成,配置下发成功后可以读取到ok
This commit is contained in:
parent
a2b75cf76c
commit
34f02a66d9
File diff suppressed because it is too large
Load Diff
|
@ -16,8 +16,9 @@ char cmd[1000] = {0}; //
|
||||||
|
|
||||||
#define TX_DMA_BUFFER_SIZE 2000
|
#define TX_DMA_BUFFER_SIZE 2000
|
||||||
|
|
||||||
uint8_t dma_tx_buffer[TX_DMA_BUFFER_SIZE];
|
|
||||||
volatile uint8_t dma_tx_busy = 0;
|
volatile uint8_t dma_tx_busy = 0;
|
||||||
|
uint8_t dma_tx_buffer[2][TX_DMA_BUFFER_SIZE];
|
||||||
|
volatile uint8_t current_buffer = 0; // 0表示正常缓冲区,1表示高优先级缓冲区
|
||||||
|
|
||||||
//定义
|
//定义
|
||||||
WifiBleItem qfc41dItem = {
|
WifiBleItem qfc41dItem = {
|
||||||
|
@ -99,6 +100,7 @@ void parse_mqtt_message(char* message)
|
||||||
{
|
{
|
||||||
hmi_write_modbus_cfg(first - 4000, second);
|
hmi_write_modbus_cfg(first - 4000, second);
|
||||||
}
|
}
|
||||||
|
drv_mqtt_publish_control_no_respose("ok", 2);
|
||||||
}
|
}
|
||||||
else if (strstr(message, "read") != NULL)
|
else if (strstr(message, "read") != NULL)
|
||||||
{
|
{
|
||||||
|
@ -154,30 +156,73 @@ void drv_wireless_send_string(const char *str)
|
||||||
drv_wireless_send_char('\n'); // 发送 LF
|
drv_wireless_send_char('\n'); // 发送 LF
|
||||||
}
|
}
|
||||||
|
|
||||||
void drv_wireless_send_string_dma(const char *str)
|
void drv_wireless_send_string_dma_high_priority(const char *str)
|
||||||
{
|
{
|
||||||
bsp_task_delay_ms(250);
|
uint32_t timeout = 0;
|
||||||
if (dma_tx_busy) return; // 正在发送,丢弃或排队视情况处理
|
|
||||||
|
|
||||||
|
uint32_t start_time = kit_time_get_tick();
|
||||||
|
while (dma_tx_busy && current_buffer == 0)
|
||||||
|
{
|
||||||
|
if (kit_time_get_tick() - start_time > 100)
|
||||||
|
{
|
||||||
|
DMA1_Stream6->CR &= ~DMA_SxCR_EN;
|
||||||
|
while (DMA1_Stream6->CR & DMA_SxCR_EN);
|
||||||
|
|
||||||
|
// 清除可能的中断标志
|
||||||
|
DMA1->HIFCR |= DMA_HIFCR_CTCIF6 | DMA_HIFCR_CTEIF6;
|
||||||
|
|
||||||
|
dma_tx_busy = 0;
|
||||||
|
current_buffer = 0;
|
||||||
|
USART2->CR3 &= ~USART_CR3_DMAT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
uint16_t len = 0;
|
uint16_t len = 0;
|
||||||
|
|
||||||
// 拷贝数据到 DMA 缓冲区
|
|
||||||
while (*str && len < TX_DMA_BUFFER_SIZE - 2) {
|
while (*str && len < TX_DMA_BUFFER_SIZE - 2) {
|
||||||
dma_tx_buffer[len++] = *str++;
|
dma_tx_buffer[1][len++] = *str++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加 \r\n
|
dma_tx_buffer[1][len++] = '\r';
|
||||||
dma_tx_buffer[len++] = '\r';
|
dma_tx_buffer[1][len++] = '\n';
|
||||||
dma_tx_buffer[len++] = '\n';
|
|
||||||
|
|
||||||
// 设置 DMA 参数并启动
|
// 设置 DMA 参数并启动
|
||||||
DMA1_Stream6->CR &= ~DMA_SxCR_EN;
|
DMA1_Stream6->CR &= ~DMA_SxCR_EN;
|
||||||
while (DMA1_Stream6->CR & DMA_SxCR_EN);
|
while (DMA1_Stream6->CR & DMA_SxCR_EN);
|
||||||
|
|
||||||
DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer;
|
DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer[1];
|
||||||
DMA1_Stream6->NDTR = len;
|
DMA1_Stream6->NDTR = len;
|
||||||
|
|
||||||
dma_tx_busy = 1;
|
dma_tx_busy = 1;
|
||||||
|
current_buffer = 1;
|
||||||
|
DMA1_Stream6->CR |= DMA_SxCR_EN;
|
||||||
|
USART2->CR3 |= USART_CR3_DMAT; // 开启 DMA 发送
|
||||||
|
}
|
||||||
|
|
||||||
|
void drv_wireless_send_string_dma(const char *str)
|
||||||
|
{
|
||||||
|
if (dma_tx_busy || current_buffer == 1) return; // 正在发送或高优先级发送中,丢弃
|
||||||
|
bsp_task_delay_ms(250);
|
||||||
|
uint16_t len = 0;
|
||||||
|
|
||||||
|
// 拷贝数据到 DMA 缓冲区
|
||||||
|
while (*str && len < TX_DMA_BUFFER_SIZE - 2)
|
||||||
|
{
|
||||||
|
dma_tx_buffer[0][len++] = *str++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dma_tx_buffer[0][len++] = '\r';
|
||||||
|
dma_tx_buffer[0][len++] = '\n';
|
||||||
|
|
||||||
|
// 设置 DMA 参数并启动
|
||||||
|
DMA1_Stream6->CR &= ~DMA_SxCR_EN;
|
||||||
|
while (DMA1_Stream6->CR & DMA_SxCR_EN);
|
||||||
|
|
||||||
|
DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer[0];
|
||||||
|
DMA1_Stream6->NDTR = len;
|
||||||
|
|
||||||
|
dma_tx_busy = 1;
|
||||||
|
current_buffer = 0;
|
||||||
DMA1_Stream6->CR |= DMA_SxCR_EN;
|
DMA1_Stream6->CR |= DMA_SxCR_EN;
|
||||||
USART2->CR3 |= USART_CR3_DMAT; // 开启 DMA 发送
|
USART2->CR3 |= USART_CR3_DMAT; // 开启 DMA 发送
|
||||||
}
|
}
|
||||||
|
@ -204,139 +249,35 @@ int drv_at_send_cmd(const char *cmd, const char *response, uint32_t timeout)
|
||||||
|
|
||||||
static uint8_t drv_wifi_init()
|
static uint8_t drv_wifi_init()
|
||||||
{
|
{
|
||||||
// 1. 设置模组波特率
|
|
||||||
/*
|
|
||||||
if (!drv_at_send_cmd(QFC41D_SET_BATE, "OK", WIFI_TIMEOUT))
|
|
||||||
{
|
|
||||||
KIT_PRINTF("WiFi Module not responding!\r\n");
|
|
||||||
return 1 ;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 2. 测试 AT 指令
|
|
||||||
if (!drv_at_send_cmd("AT", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("WiFi Module not responding!\r\n");
|
|
||||||
return 1 ;
|
return 1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drv_at_send_cmd("AT+QSTASTOP", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QSTASTOP", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drv_at_send_cmd("AT+QSOFTAPSTOP", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QSOFTAPSTOP", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (!drv_at_send_cmd("AT+QSTAAPINFO=BLUESUNESS,bluesun009", "OK", WIFI_CONNECT_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
// kit_time_dly_ms(2000);
|
|
||||||
|
|
||||||
// if (!drv_at_send_cmd("AT+QSTAAPINFO=BLUESUNESS,bluesun009", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 3. 设置 Wi-Fi 为 DHCP使能
|
|
||||||
// if (!drv_at_send_cmd(QFC41D_SET_DHCP_ENABLE, "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 4. 连接 Wi-Fi
|
|
||||||
// snprintf(cmd, sizeof(cmd), "AT+QSTAAPINFODEF=%s,%s", wifiName, wifiPassWord);
|
|
||||||
// if (!drv_at_send_cmd(cmd, "WIFI CONNECTED", WIFI_TIMEOUT * 2))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to connect to WiFi!\r\n");
|
|
||||||
// //return 1; //错误不返回-防止影响主任务执行
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 5. 获取 IP 地址
|
|
||||||
// if (!drv_at_send_cmd("AT+QGETIP=station", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to get IP address!\r\n");
|
|
||||||
// //return 1; //错误不返回-防止影响主任务执行
|
|
||||||
// }
|
|
||||||
|
|
||||||
// KIT_PRINTF("WiFi Initialization Successful!\r\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t drv_ble_init()
|
uint8_t drv_ble_init()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 1. 初始化,蓝牙作为服务器
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEINIT=3", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to power off BLE!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 2. 设置蓝牙名称
|
|
||||||
// snprintf(cmd, sizeof(cmd), "AT+QBLENAME=%s", bleName);
|
|
||||||
// if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set BLE name!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 3. 设置广播参数
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEADVPARAM=2048,2048", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to enable BLE!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 4. 设置广播数据
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEADVDATA=06094643343144", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to enable BLE!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 5. 创建服务
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEGATTSSRV=FFF0", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set BLE role!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // 6. 创建特征值
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEGATTSSRV=FFF1", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set BLE role!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 7. 开始广播
|
|
||||||
// if (!drv_at_send_cmd("AT+QBLEADVSTART", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to start BLE advertising!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// KIT_PRINTF("BLE Initialization Successful!\r\n");
|
|
||||||
|
|
||||||
|
|
||||||
if (!drv_at_send_cmd("AT+QBLEINIT=3", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QBLEINIT=3", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("Failed to set BLE role!\r\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置wifi名称,必须以BSM开头,后缀可以加sn码
|
//设置wifi名称,必须以BSM开头,后缀可以加sn码
|
||||||
if (!drv_at_send_cmd("AT+QBLENAME=BSM11223344", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QBLENAME=BSM11223344", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("Failed to start BLE advertising!\r\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -353,12 +294,6 @@ uint8_t drv_qfc41d_init(void)
|
||||||
//设置接收回调函数
|
//设置接收回调函数
|
||||||
drv_uart_set_interrupt(QFC41D_UART_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, drv_qf41d_uart_rx_it_call);//#define SIM_UART_PORT kUartDev_2
|
drv_uart_set_interrupt(QFC41D_UART_PORT, kUartInterrupt_Rx, APP_CFG_INT_PRIO_UART2_RX, drv_qf41d_uart_rx_it_call);//#define SIM_UART_PORT kUartDev_2
|
||||||
|
|
||||||
//初始化wifi
|
|
||||||
// if(drv_wifi_init() != 0)
|
|
||||||
// {
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//初始化蓝牙(BLE)
|
//初始化蓝牙(BLE)
|
||||||
if (drv_ble_init() != 0)
|
if (drv_ble_init() != 0)
|
||||||
{
|
{
|
||||||
|
@ -378,40 +313,6 @@ uint8_t drv_qfc41d_init(void)
|
||||||
#define MQTT_TOPIC_control "bluesun/bms/control/reply/11223344"
|
#define MQTT_TOPIC_control "bluesun/bms/control/reply/11223344"
|
||||||
#define MQTT_TOPIC_read "bluesun/bms/read/reply/11223344"
|
#define MQTT_TOPIC_read "bluesun/bms/read/reply/11223344"
|
||||||
|
|
||||||
// 连接 MQTT 服务器
|
|
||||||
//uint8_t drv_mqtt_connect()
|
|
||||||
//{
|
|
||||||
//
|
|
||||||
// //1、设置 MQTT 协议的版本号为 V4
|
|
||||||
//// snprintf(cmd, sizeof(cmd), "AT+QMTCFG=\"version\",1,4");
|
|
||||||
//// if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
|
||||||
//// {
|
|
||||||
//// KIT_PRINTF("Failed to set MQTT server!\r\n");
|
|
||||||
//// return 1;
|
|
||||||
//// }
|
|
||||||
//
|
|
||||||
// //2、建立 MQTT 客户端与服务器之间的会话连接
|
|
||||||
// snprintf(cmd, sizeof(cmd), "AT+QMTOPEN=0,\"%s\",%d",MQTT_BROKER,MQTT_PORT);
|
|
||||||
// if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set MQTT server!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
|
|
||||||
// //2、MQTT 客户端与服务器之间建立 MQTT 连接 AT+QMTCONN=<clientID>,<client_identity>,<username>,<password>
|
|
||||||
// //snprintf(cmd, sizeof(cmd), "AT+QMTCONN=0,%s,%s,%s",MQTT_CLIENT_ID,MQTT_USER, MQTT_PASSWORD);
|
|
||||||
// if (!drv_at_send_cmd("AT+QMTCONN=0,\"clientBCUwifi03\"", "OK", WIFI_TIMEOUT))
|
|
||||||
// {
|
|
||||||
// KIT_PRINTF("Failed to set MQTT client credentials!\r\n");
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// KIT_PRINTF("MQTT Connection Successful!\r\n");
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 订阅 MQTT 主题
|
|
||||||
static uint8_t drv_mqtt_subscribe()
|
static uint8_t drv_mqtt_subscribe()
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+MQTTSUB=0,1,\"%s\",2", MQTT_TOPIC);
|
snprintf(cmd, sizeof(cmd), "AT+MQTTSUB=0,1,\"%s\",2", MQTT_TOPIC);
|
||||||
|
@ -419,22 +320,14 @@ static uint8_t drv_mqtt_subscribe()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发布 MQTT 消息
|
|
||||||
/*
|
|
||||||
* AT+QMTPUB=<clientID>,<msgID>,<QoS>,<retain>,<topic>,<payload_len gth>,<payload>
|
|
||||||
* length 范围0~1500
|
|
||||||
* str 是mqtt传输的json串
|
|
||||||
*/
|
|
||||||
uint8_t drv_mqtt_publish(char* str,uint16_t length)
|
uint8_t drv_mqtt_publish(char* str,uint16_t length)
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str);
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str);
|
||||||
if (!drv_at_send_cmd(cmd, "OK\0", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd(cmd, "OK\0", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
// KIT_PRINTF("Failed to publish message!\r\n");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// KIT_PRINTF("MQTT Message Published Successfully!\r\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,36 +337,19 @@ uint8_t drv_mqtt_publish_no_respose(char* str,uint16_t length)
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC, length, str);
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC, length, str);
|
||||||
// drv_wireless_send_string(cmd); // 未使用DMA
|
// drv_wireless_send_string(cmd); // 未使用DMA
|
||||||
drv_wireless_send_string_dma(cmd); // 使用DMA
|
drv_wireless_send_string_dma(cmd); // 使用DMA
|
||||||
// kit_time_dly_ms(100);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t drv_mqtt_publish_control_no_respose(char* str,uint16_t length)
|
uint8_t drv_mqtt_publish_control_no_respose(char* str,uint16_t length)
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC_control, length, str);
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC_control, length, str);
|
||||||
drv_wireless_send_string_dma(cmd);
|
drv_wireless_send_string_dma_high_priority(cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t drv_mqtt_publish_read_no_respose(char* str,uint16_t length)
|
uint8_t drv_mqtt_publish_read_no_respose(char* str,uint16_t length)
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC_read, length, str);
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC_read, length, str);
|
||||||
drv_wireless_send_string_dma(cmd);
|
drv_wireless_send_string_dma_high_priority(cmd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// MQTT 初始化
|
|
||||||
//uint8_t drv_mqtt_init()
|
|
||||||
//{
|
|
||||||
// if (drv_mqtt_connect() != 0)
|
|
||||||
// {
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (drv_mqtt_subscribe() != 0)
|
|
||||||
// {
|
|
||||||
// return 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return 0;
|
|
||||||
//}
|
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
#define DMA_STREAM3_IT_ERR ((uint32_t)0x03400000)
|
#define DMA_STREAM3_IT_ERR ((uint32_t)0x03400000)
|
||||||
#define DMA_STREAM3_IT_FLAG ((uint32_t)0x0F400000)
|
#define DMA_STREAM3_IT_FLAG ((uint32_t)0x0F400000)
|
||||||
|
|
||||||
extern uint8_t dma_tx_busy;
|
extern volatile uint8_t dma_tx_busy;
|
||||||
|
extern volatile uint8_t current_buffer;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
@ -278,15 +279,23 @@ void DMA1_Stream5_IRQHandler(void)
|
||||||
|
|
||||||
void DMA1_Stream6_IRQHandler(void)
|
void DMA1_Stream6_IRQHandler(void)
|
||||||
{
|
{
|
||||||
if (DMA1->HISR & DMA_HISR_TCIF6) {
|
if (DMA1->HISR & DMA_HISR_TCIF6)
|
||||||
|
{
|
||||||
DMA1->HIFCR |= DMA_HIFCR_CTCIF6;
|
DMA1->HIFCR |= DMA_HIFCR_CTCIF6;
|
||||||
dma_tx_busy = 0;
|
dma_tx_busy = 0;
|
||||||
USART2->CR3 &= ~USART_CR3_DMAT; // 传输完成后关闭DMA请求
|
USART2->CR3 &= ~USART_CR3_DMAT; // 传输完成后关闭DMA请求
|
||||||
}
|
|
||||||
else if (DMA1->HISR & DMA_HISR_TEIF6) {
|
|
||||||
DMA1->HIFCR |= DMA_HIFCR_CTEIF6;
|
|
||||||
|
|
||||||
|
// 如果是高优先级缓冲区发送完成,切换回正常缓冲区
|
||||||
|
if (current_buffer == 1)
|
||||||
|
{
|
||||||
|
current_buffer = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (DMA1->HISR & DMA_HISR_TEIF6)
|
||||||
|
{
|
||||||
|
DMA1->HIFCR |= DMA_HIFCR_CTEIF6;
|
||||||
dma_tx_busy = 0;
|
dma_tx_busy = 0;
|
||||||
|
current_buffer = 0; // 发生错误也切换回正常缓冲区
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue