forked from gary/BCU
2
0
Fork 0

与张工重新核对了一遍mqtt上传的数据--第一版

This commit is contained in:
Carl 2025-05-17 08:27:05 +08:00
parent 0efd486cbe
commit 7a7bd6e768
5 changed files with 4157 additions and 3941 deletions

View File

@ -7,6 +7,10 @@
#include "gpio_manager.h" #include "gpio_manager.h"
#include "stm32f4xx.h" #include "stm32f4xx.h"
//#define TX_DMA_BUFFER_SIZE 800
extern uint8_t dma_tx_buffer[];
const GpioArray io_array[kGpioType_End] = const GpioArray io_array[kGpioType_End] =
{ {
/*12个DI*/ /*12个DI*/
@ -93,37 +97,38 @@ const GpioArray io_array[kGpioType_End] =
kGpioMode_Input_Floating, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_G, 15), kGpioPort_G, kGpioPin_15 , //W5500_INT kGpioMode_Input_Floating, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_G, 15), kGpioPort_G, kGpioPin_15 , //W5500_INT
}; };
//void drv_wireless_dma_init(void) void drv_wireless_dma_init(void)
//{ {
// // 使能 DMA1 和 USART2 的时钟 // 使能 DMA1 和 USART2 的时钟
// RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN;
// RCC->APB1ENR |= RCC_APB1ENR_USART2EN; RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
// // 配置 USART2 基本参数 // 配置 USART2 基本参数
// USART2->CR1 &= ~USART_CR1_UE; // 先禁用USART USART2->CR1 &= ~USART_CR1_UE; // 先禁用USART
// USART2->BRR = SystemCoreClock / 115200; // 设置波特率 USART2->BRR = SystemCoreClock / 115200; // 设置波特率
// USART2->CR1 = USART_CR1_TE | USART_CR1_UE; USART2->CR1 = USART_CR1_TE | USART_CR1_UE;
// // 配置 DMA1 Stream6 通道4 对应 USART2_TX // 配置 DMA1 Stream6 通道4 对应 USART2_TX
// DMA1_Stream6->CR &= ~DMA_SxCR_EN; DMA1_Stream6->CR &= ~DMA_SxCR_EN;
// while (DMA1_Stream6->CR & DMA_SxCR_EN); // 等待 DMA 关闭 while (DMA1_Stream6->CR & DMA_SxCR_EN); // 等待 DMA 关闭
// DMA1_Stream6->PAR = (uint32_t)&USART2->DR; DMA1_Stream6->PAR = (uint32_t)&USART2->DR;
// DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer; DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer;
// DMA1_Stream6->NDTR = 0; DMA1_Stream6->NDTR = 0;
// DMA1_Stream6->CR = (4 << 25) | // 通道4 DMA1_Stream6->CR = (4 << 25) | // 通道4
// DMA_SxCR_MINC | // 内存递增 DMA_SxCR_MINC | // 内存递增
// DMA_SxCR_DIR_0 | // 内存到外设 DMA_SxCR_DIR_0 | // 内存到外设
// DMA_SxCR_TCIE | // 传输完成中断 DMA_SxCR_TCIE | // 传输完成中断
// DMA_SxCR_TEIE | // 建议添加传输错误中断 DMA_SxCR_TEIE | // 建议添加传输错误中断
// (0 << 16); // 优先级 (0 << 16); // 优先级
// NVIC_EnableIRQ(DMA1_Stream6_IRQn); NVIC_EnableIRQ(DMA1_Stream6_IRQn);
//} }
void bms_init_gpio(void) void bms_init_gpio(void)
{ {
drv_gpio_init(io_array, kGpioType_End); drv_gpio_init(io_array, kGpioType_End);
drv_wireless_dma_init();
} }

File diff suppressed because it is too large Load Diff

View File

@ -216,6 +216,9 @@ uint32_t bms_get_baseInfo(uint16_t input)
return tmp; return tmp;
case 54: case 54:
tmp = bms_get_do_status_by_type(kDoType_Chg); tmp = bms_get_do_status_by_type(kDoType_Chg);
return tmp;
case 55:
tmp = 1;
return tmp; return tmp;
default: default:
return 0; return 0;
@ -710,6 +713,7 @@ uint32_t bms_get_fault_level_3(uint16_t input)
//把这个请按照数据模型填充完毕 //把这个请按照数据模型填充完毕
const devPointMap bms_points[] = { const devPointMap bms_points[] = {
{"BCU_1", 0, 55, bms_get_baseInfo}, // 设备在线
{"BCU_2", 0, 0, bms_get_total_alarm}, // 总告警 {"BCU_2", 0, 0, bms_get_total_alarm}, // 总告警
{"BCU_3", 0, 0, bms_get_total_fault}, // 总故障 {"BCU_3", 0, 0, bms_get_total_fault}, // 总故障
{"BCU_4", 0, 1, bms_get_fault_level_1}, // 单体过压告警一级 {"BCU_4", 0, 1, bms_get_fault_level_1}, // 单体过压告警一级
@ -752,8 +756,8 @@ const devPointMap bms_points[] = {
{"BCU_38", 0, 0, NULL}, // 簇间环流3级告警 {"BCU_38", 0, 0, NULL}, // 簇间环流3级告警
{"BCU_39", 0, 0, NULL}, // 簇间电流差1级告警 {"BCU_39", 0, 0, NULL}, // 簇间电流差1级告警
{"BCU_40", 0, 0, NULL}, // 簇间电流差2级告警 {"BCU_40", 0, 0, NULL}, // 簇间电流差2级告警
{"BCU_41", 0, 0, NULL}, // 簇间电流差3级告警
{"BCU_41", 1, 0, NULL}, // 簇间电流差3级告警
{"BCU_42", 1, 11, bms_get_fault_level_1}, // 组端过压1级告警 {"BCU_42", 1, 11, bms_get_fault_level_1}, // 组端过压1级告警
{"BCU_43", 1, 11, bms_get_fault_level_2}, // 组端过压2级告警 {"BCU_43", 1, 11, bms_get_fault_level_2}, // 组端过压2级告警
{"BCU_44", 1, 11, bms_get_fault_level_3}, // 组端过压3级告警 {"BCU_44", 1, 11, bms_get_fault_level_3}, // 组端过压3级告警
@ -768,74 +772,130 @@ const devPointMap bms_points[] = {
{"BCU_52", 1, 0, NULL}, // AFE电压排线异常 {"BCU_52", 1, 0, NULL}, // AFE电压排线异常
{"BCU_53", 1, 0, NULL}, // 与电池簇通信告警 {"BCU_53", 1, 0, NULL}, // 与电池簇通信告警
{"BCU_54", 1, 0, NULL}, // 主从通讯告警 {"BCU_54", 1, 0, NULL}, // 主从通讯告警
{"BCU_55", 1, 14, bms_get_fault_level_3}, // 继电器粘连告警
{"BCU_56", 1, 15, bms_get_fault_level_3}, // 电池极限故障 {"BCU_55", 1, 0, NULL}, // 熔丝故障
{"BCU_57", 1, 0, NULL}, // 熔丝故障 {"BCU_56", 1, 0, NULL}, // 断路器故障
{"BCU_58", 1, 0, NULL}, // 断路器故障 {"BCU_57", 1, 0, NULL}, // 空调故障
{"BCU_59", 1, 0, NULL}, // 空调故障 {"BCU_58", 1, 0, NULL}, // 消防设备故障
{"BCU_60", 1, 0, NULL}, // 消防设备故障 {"BCU_59", 1, 0, NULL}, // 消防火警
{"BCU_61", 1, 0, NULL}, // 消防火警 {"BCU_60", 1, 0, NULL}, // 消防喷洒
{"BCU_62", 1, 0, NULL}, // 消防喷洒 {"BCU_61", 1, 0, NULL}, // AFE故障
{"BCU_63", 1, 0, NULL}, // AFE故障 {"BCU_62", 1, 14, bms_get_fault_level_1}, // 高压异常
{"BCU_64", 1, 14, bms_get_fault_level_1}, // 高压异常 {"BCU_63", 1, 16, bms_get_fault_level_3}, // 预充告警
{"BCU_65", 1, 16, bms_get_fault_level_3}, // 预充告警 {"BCU_64", 1, 17, bms_get_fault_level_3}, // 开路故障
{"BCU_66", 1, 17, bms_get_fault_level_3}, // 开路故障
{"BCU_65", 1, 14, bms_get_fault_level_3}, // 继电器粘连告警
{"BCU_66", 1, 15, bms_get_fault_level_3}, // 电池极限故障
{"BCU_67", 1, 52, bms_get_baseInfo}, // 预充继电器
{"BCU_68", 1, 53, bms_get_baseInfo}, // 总正继电器
{"BCU_69", 1, 54, bms_get_baseInfo}, // 总负继电器
{"BCU_101", 1, 1, bms_get_baseInfo}, // 总压
{"BCU_102", 1, 2, bms_get_baseInfo}, // 总电流
{"BCU_103", 1, 3, bms_get_baseInfo}, // SOC
{"BCU_104", 1, 4, bms_get_baseInfo}, // SOH
{"BCU_105", 1, 5, bms_get_baseInfo}, // SOE
{"BCU_106", 1, 6, bms_get_baseInfo}, // 额定总压
{"BCU_107", 1, 7, bms_get_baseInfo}, // 额定容量
{"BCU_108", 1, 8, bms_get_baseInfo}, // 剩余容量
{"BCU_109", 1, 9, bms_get_baseInfo}, // 额定电量
{"BCU_110", 1, 10, bms_get_baseInfo}, // 剩余电量
{"BCU_111", 1, 11, bms_get_baseInfo}, // 从机总数(BMU)
{"BCU_112", 2, 12, bms_get_baseInfo}, // 在线从机总数(BMU)
{"BCU_113", 2, 13, bms_get_baseInfo}, // 电池总数
{"BCU_114", 2, 14, bms_get_baseInfo}, // 在线电池总数
{"BCU_115", 2, 15, bms_get_baseInfo}, // 温感总数
{"BCU_116", 2, 16, bms_get_baseInfo}, // 在线温感总数
{"BCU_117", 2, 17, bms_get_baseInfo}, // 最大允许放电电流
{"BCU_118", 2, 18, bms_get_baseInfo}, // 最大允许放电功率
{"BCU_119", 2, 19, bms_get_baseInfo}, // 最大允许充电电流
{"BCU_120", 2, 20, bms_get_baseInfo}, // 最大允许充电功率
{"BCU_121", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值
{"BCU_122", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值
{"BCU_123", 2, 23, bms_get_baseInfo}, // 单体平均电压
{"BCU_124", 2, 24, bms_get_baseInfo}, // 单体最大压差
{"BCU_125", 2, 25, bms_get_baseInfo}, // 最高单体电压
{"BCU_126", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号
{"BCU_127", 2, 27, bms_get_baseInfo}, // 最高单体电压编号
{"BCU_128", 2, 28, bms_get_baseInfo}, // 最低单体电压
{"BCU_129", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号
{"BCU_130", 2, 30, bms_get_baseInfo}, // 最低单体电压编号
{"BCU_131", 2, 31, bms_get_baseInfo}, // 单体平均温度
{"BCU_132", 2, 32, bms_get_baseInfo}, // 最大温差
{"BCU_133", 2, 33, bms_get_baseInfo}, // 最高单体温度
{"BCU_134", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号
{"BCU_135", 2, 35, bms_get_baseInfo}, // 最高单体温度编号
{"BCU_136", 2, 36, bms_get_baseInfo}, // 最低单体温度
{"BCU_137", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
{"BCU_138", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
{"BCU_139", 2, 39, bms_get_baseInfo}, // 日充电容量
{"BCU_140", 2, 40, bms_get_baseInfo}, // 日充电电量
{"BCU_141", 2, 41, bms_get_baseInfo}, // 日放电容量
{"BCU_142", 2, 42, bms_get_baseInfo}, // 日放电电量
{"BCU_143", 2, 43, bms_get_baseInfo}, // 日充电时间
{"BCU_144", 2, 44, bms_get_baseInfo}, // 日放电时间
{"BCU_145", 2, 45, bms_get_baseInfo}, // 累计充电容量
{"BCU_146", 2, 46, bms_get_baseInfo}, // 累计充电电量
{"BCU_147", 2, 47, bms_get_baseInfo}, // 累计放电容量
{"BCU_148", 2, 48, bms_get_baseInfo}, // 累计放电电量
{"BCU_149", 2, 49, bms_get_baseInfo}, // 累计充电时间
{"BCU_150", 2, 50, bms_get_baseInfo}, // 累计放电时间
{"BCU_151", 2, 51, bms_get_baseInfo}, // BCU工作状态
// {"BCU_67", 1, 1, bms_get_baseInfo}, // 总压
// {"BCU_68", 1, 2, bms_get_baseInfo}, // 总电流
// {"BCU_69", 1, 3, bms_get_baseInfo}, // SOC
// {"BCU_70", 1, 4, bms_get_baseInfo}, // SOH
// {"BCU_71", 1, 5, bms_get_baseInfo}, // SOE
// {"BCU_72", 1, 6, bms_get_baseInfo}, // 额定总压
// {"BCU_73", 1, 7, bms_get_baseInfo}, // 额定容量
// {"BCU_74", 1, 8, bms_get_baseInfo}, // 剩余容量
// {"BCU_75", 1, 9, bms_get_baseInfo}, // 额定电量
// {"BCU_76", 1, 10, bms_get_baseInfo}, // 剩余电量
// {"BCU_77", 1, 11, bms_get_baseInfo}, // 从机总数(BMU)
// {"BCU_78", 1, 12, bms_get_baseInfo}, // 在线从机总数(BMU)
// {"BCU_79", 1, 13, bms_get_baseInfo}, // 电池总数
// {"BCU_80", 1, 14, bms_get_baseInfo}, // 在线电池总数
// {"BCU_81", 1, 15, bms_get_baseInfo}, // 温感总数
{"BCU_67", 1, 1, bms_get_baseInfo}, // 总压 // {"BCU_82", 2, 16, bms_get_baseInfo}, // 在线温感总数
{"BCU_68", 1, 2, bms_get_baseInfo}, // 总电流 // {"BCU_83", 2, 17, bms_get_baseInfo}, // 最大允许放电电流
{"BCU_69", 1, 3, bms_get_baseInfo}, // SOC // {"BCU_84", 2, 18, bms_get_baseInfo}, // 最大允许放电功率
{"BCU_70", 1, 4, bms_get_baseInfo}, // SOH // {"BCU_85", 2, 19, bms_get_baseInfo}, // 最大允许充电电流
{"BCU_71", 1, 5, bms_get_baseInfo}, // SOE // {"BCU_86", 2, 20, bms_get_baseInfo}, // 最大允许充电功率
{"BCU_72", 1, 6, bms_get_baseInfo}, // 额定总压 // {"BCU_87", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值
{"BCU_73", 1, 7, bms_get_baseInfo}, // 额定容量 // {"BCU_88", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值
{"BCU_74", 1, 8, bms_get_baseInfo}, // 剩余容量 // {"BCU_89", 2, 23, bms_get_baseInfo}, // 单体平均电压
{"BCU_75", 1, 9, bms_get_baseInfo}, // 额定电量 // {"BCU_90", 2, 24, bms_get_baseInfo}, // 单体最大压差
{"BCU_76", 1, 10, bms_get_baseInfo}, // 剩余电量 // {"BCU_91", 2, 25, bms_get_baseInfo}, // 最高单体电压
{"BCU_77", 1, 11, bms_get_baseInfo}, // 从机总数(BMU) // {"BCU_92", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号
{"BCU_78", 1, 12, bms_get_baseInfo}, // 在线从机总数(BMU) // {"BCU_93", 2, 27, bms_get_baseInfo}, // 最高单体电压编号
{"BCU_79", 1, 13, bms_get_baseInfo}, // 电池总数 // {"BCU_94", 2, 28, bms_get_baseInfo}, // 最低单体电压
{"BCU_80", 1, 14, bms_get_baseInfo}, // 在线电池总数 // {"BCU_95", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号
{"BCU_81", 1, 15, bms_get_baseInfo}, // 温感总数 // {"BCU_96", 2, 30, bms_get_baseInfo}, // 最低单体电压编号
// {"BCU_97", 2, 31, bms_get_baseInfo}, // 单体平均温度
{"BCU_82", 2, 16, bms_get_baseInfo}, // 在线温感总数 // {"BCU_98", 2, 32, bms_get_baseInfo}, // 最大温差
{"BCU_83", 2, 17, bms_get_baseInfo}, // 最大允许放电电流 // {"BCU_99", 2, 33, bms_get_baseInfo}, // 最高单体温度
{"BCU_84", 2, 18, bms_get_baseInfo}, // 最大允许放电功率 // {"BCU_100", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号
{"BCU_85", 2, 19, bms_get_baseInfo}, // 最大允许充电电流 // {"BCU_101", 2, 35, bms_get_baseInfo}, // 最高单体温度编号
{"BCU_86", 2, 20, bms_get_baseInfo}, // 最大允许充电功率 // {"BCU_102", 2, 36, bms_get_baseInfo}, // 最低单体温度
{"BCU_87", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值 // {"BCU_103", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
{"BCU_88", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值 // {"BCU_104", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
{"BCU_89", 2, 23, bms_get_baseInfo}, // 单体平均电压 // {"BCU_105", 2, 39, bms_get_baseInfo}, // 日充电容量
{"BCU_90", 2, 24, bms_get_baseInfo}, // 单体最大压差 // {"BCU_106", 2, 40, bms_get_baseInfo}, // 日充电电量
{"BCU_91", 2, 25, bms_get_baseInfo}, // 最高单体电压 // {"BCU_107", 2, 41, bms_get_baseInfo}, // 日放电容量
{"BCU_92", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号 // {"BCU_108", 2, 42, bms_get_baseInfo}, // 日放电电量
{"BCU_93", 2, 27, bms_get_baseInfo}, // 最高单体电压编号 // {"BCU_109", 2, 43, bms_get_baseInfo}, // 日充电时间
{"BCU_94", 2, 28, bms_get_baseInfo}, // 最低单体电压 // {"BCU_110", 2, 44, bms_get_baseInfo}, // 日放电时间
{"BCU_95", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号 // {"BCU_111", 2, 45, bms_get_baseInfo}, // 累计充电容量
{"BCU_96", 2, 30, bms_get_baseInfo}, // 最低单体电压编号 // {"BCU_112", 2, 46, bms_get_baseInfo}, // 累计充电电量
{"BCU_97", 2, 31, bms_get_baseInfo}, // 单体平均温度 // {"BCU_113", 2, 47, bms_get_baseInfo}, // 累计放电容量
{"BCU_98", 2, 32, bms_get_baseInfo}, // 最大温差 // {"BCU_114", 2, 48, bms_get_baseInfo}, // 累计放电电量
{"BCU_99", 2, 33, bms_get_baseInfo}, // 最高单体温度 // {"BCU_115", 2, 49, bms_get_baseInfo}, // 累计充电时间
{"BCU_100", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号 // {"BCU_116", 2, 50, bms_get_baseInfo}, // 累计放电时间
{"BCU_101", 2, 35, bms_get_baseInfo}, // 最高单体温度编号 // {"BCU_117", 2, 51, bms_get_baseInfo}, // BCU工作状态
{"BCU_102", 2, 36, bms_get_baseInfo}, // 最低单体温度
{"BCU_103", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
{"BCU_104", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
{"BCU_105", 2, 39, bms_get_baseInfo}, // 日充电容量
{"BCU_106", 2, 40, bms_get_baseInfo}, // 日充电电量
{"BCU_107", 2, 41, bms_get_baseInfo}, // 日放电容量
{"BCU_108", 2, 42, bms_get_baseInfo}, // 日放电电量
{"BCU_109", 2, 43, bms_get_baseInfo}, // 日充电时间
{"BCU_110", 2, 44, bms_get_baseInfo}, // 日放电时间
{"BCU_111", 2, 45, bms_get_baseInfo}, // 累计充电容量
{"BCU_112", 2, 46, bms_get_baseInfo}, // 累计充电电量
{"BCU_113", 2, 47, bms_get_baseInfo}, // 累计放电容量
{"BCU_114", 2, 48, bms_get_baseInfo}, // 累计放电电量
{"BCU_115", 2, 49, bms_get_baseInfo}, // 累计充电时间
{"BCU_116", 2, 50, bms_get_baseInfo}, // 累计放电时间
{"BCU_117", 2, 51, bms_get_baseInfo}, // BCU工作状态
{"BCU_118", 2, 52, bms_get_baseInfo}, // 预充继电器
{"BCU_119", 2, 53, bms_get_baseInfo}, // 总正继电器
{"BCU_120", 2, 54, bms_get_baseInfo}, // 总负继电器
}; };
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]); const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
@ -1098,7 +1158,7 @@ void mqtt_publish_bms_data(uint32_t basetime)
// } // }
// } // }
if (!drv_at_send_cmd("AT+QMTCONN?", "0,3\0", WIFI_TIMEOUT)) if (!drv_at_send_cmd("AT+QMTCONN?", "3\0", WIFI_TIMEOUT))
{ {
drv_mqtt_connect(); drv_mqtt_connect();
} }

View File

@ -13,6 +13,12 @@ uint8_t send_buff[QFC41D_MAX_SEND_SIZE] = {0};
char wifiName[40] = "BLUESUNESS", wifiPassWord[40] = "bluesun009", bleName[40] = "bsm1"; char wifiName[40] = "BLUESUNESS", wifiPassWord[40] = "bluesun009", bleName[40] = "bsm1";
char cmd[1000] = {0}; //降低栈空间使用 char cmd[1000] = {0}; //降低栈空间使用
#define TX_DMA_BUFFER_SIZE 800
uint8_t dma_tx_buffer[TX_DMA_BUFFER_SIZE];
volatile uint8_t dma_tx_busy = 0;
//定义 //定义
WifiBleItem qfc41dItem = { WifiBleItem qfc41dItem = {
.dev = QFC41D_UART_PORT, .dev = QFC41D_UART_PORT,
@ -64,6 +70,34 @@ 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)
{
if (dma_tx_busy) return; // 正在发送,丢弃或排队视情况处理
uint16_t len = 0;
// 拷贝数据到 DMA 缓冲区
while (*str && len < TX_DMA_BUFFER_SIZE - 2) {
dma_tx_buffer[len++] = *str++;
}
// 添加 \r\n
dma_tx_buffer[len++] = '\r';
dma_tx_buffer[len++] = '\n';
// 设置 DMA 参数并启动
DMA1_Stream6->CR &= ~DMA_SxCR_EN;
while (DMA1_Stream6->CR & DMA_SxCR_EN);
DMA1_Stream6->M0AR = (uint32_t)dma_tx_buffer;
DMA1_Stream6->NDTR = len;
dma_tx_busy = 1;
DMA1_Stream6->CR |= DMA_SxCR_EN;
USART2->CR3 |= USART_CR3_DMAT; // 开启 DMA 发送
}
// 发送 AT 指令并等待返回值 // 发送 AT 指令并等待返回值
int drv_at_send_cmd(const char *cmd, const char *response, uint32_t timeout) int drv_at_send_cmd(const char *cmd, const char *response, uint32_t timeout)
{ {
@ -308,7 +342,7 @@ static uint8_t drv_mqtt_subscribe()
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=0,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str); snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str);
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT)) if (!drv_at_send_cmd(cmd, "OK\0", WIFI_TIMEOUT))
{ {
// KIT_PRINTF("Failed to publish message!\r\n"); // KIT_PRINTF("Failed to publish message!\r\n");
return 1; return 1;
@ -324,6 +358,7 @@ uint8_t drv_mqtt_publish_no_respose(char* str,uint16_t length)
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC, length, str); snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,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;
} }

View File

@ -276,19 +276,19 @@ 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) { else if (DMA1->HISR & DMA_HISR_TEIF6) {
// DMA1->HIFCR |= DMA_HIFCR_CTEIF6; DMA1->HIFCR |= DMA_HIFCR_CTEIF6;
// dma_tx_busy = 0; dma_tx_busy = 0;
// } }
//} }
void DMA1_Channel6_IRQHandler(void) void DMA1_Channel6_IRQHandler(void)
{ {