CC2541,基于BLE4.0协议栈,实现DHT11数据的串口打印,出现打印格式不规整,如何解决?

荒蔚 2020-03-28 05:54:20
协议栈1.3.0版本
其中
1.添加调用DHT11采集事件(SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent中的SBP_START_DEVICE_EVT事件)
 if ( events & SBP_START_DEVICE_EVT )
{
// Start the Device
VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs );

// Start Bond Manager
VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs );

// Set timer for first periodic event
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );

//添加
//启动定时器执行周期采集DHT11温湿度事件
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_DHT11_READ_HUMITURE_EVT, SBP_DHT11_READ_HUMITURE_EVT_PERIOD );
//添加

return ( events ^ SBP_START_DEVICE_EVT );
}


2.定义DHT11采集事件、DHT11串口发送事件(SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent中)
//添加
//周期采集DHT11温湿度事件
if ( events & SBP_DHT11_READ_HUMITURE_EVT )
{
//关总中断,不关会出现0的数据
EA = 0;

//采集DHT11温湿度
DHT11_Read_Humiture(sbDHT11_data);

//开总中断
EA = 1;

//启动定时器执行串口打印DHT11温湿度事件
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_DHT11_USART_EVT, SBP_DHT11_USART_EVT_PERIOD );

//启动定时器执行周期采集DHT11温湿度事件
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_DHT11_READ_HUMITURE_EVT, SBP_DHT11_READ_HUMITURE_EVT_PERIOD );

return (events ^ SBP_DHT11_READ_HUMITURE_EVT);
}

//串口打印DHT11温湿度事件
if ( events & SBP_DHT11_USART_EVT )
{
uint8 nString[15] = {0};

//温度
sprintf((char *)nString, "DHT11 temp: %d.%d", sbDHT11_data[2], sbDHT11_data[3]);
NPI_PrintString(nString);
NPI_PrintString(" ");

//湿度
sprintf((char *)nString, "DHT11 humi: %d.%d", sbDHT11_data[0], sbDHT11_data[1]);
NPI_PrintString(nString);
NPI_PrintString("\r\n");

return (events ^ SBP_DHT11_USART_EVT);
}
//添加


结果利用串口调试助手,打印数据时,发现打印的格式不定时的混乱,如图所示。请问问题出在哪里?该怎么解决?
...全文
49 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,846

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 无线
社区管理员
  • 无线
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧