我使用了官方给的BLE Serial Port例程和LL drivers里的ADC例程
在把ADC例程主函数中的一些初始化的函数放到SERIAL port例程的主函数后,将循环部分做成了一个函数
unsigned long adc[CMD_BUFF_SIZE];
#if CLIENT
void adcadcadc(void)
{
uint32_t nVBattRawVal = 0;
uint8_t ret;
/* Check the ADC flag End Of Down Sampler conversion */
if( LL_ADC_IsActiveFlag_EODS(ADC) == 1) {
/* Get the battery raw value from the Down Sampler */
nVBattRawVal = LL_ADC_DSGetOutputData(ADC);
adc[0] = LL_ADC_GetADCConvertedValueBatt(ADC, nVBattRawVal, USER_DATAWIDTH);
/* Printout the output value */
//printf("Battery voltage %d mV\r\n", LL_ADC_GetADCConvertedValueBatt(ADC, nVBattRawVal, USER_DATAWIDTH));
ret = aci_gatt_clt_write_without_resp(connection_handle, rx_handle + 1,USER_DATAWIDTH ,
(uint8_t *)adc[0]);
if (ret != BLE_STATUS_SUCCESS)
{
printf("Error to send ");
}
/* Clear the ADC flag End Of Down Sampler conversion */
LL_ADC_ClearFlag_EODS(ADC);
/* Toggle the conversion/activity LED */
BSP_LED_Toggle(BSP_LED1);
/* Add 100 ms of delay between each measure */
LL_mDelay(100);
/* Restart ADC conversion */
LL_ADC_StartConversion(ADC);
}
/* Check the ADC flag overrun of Down Sampler */
if( LL_ADC_IsActiveFlag_OVRDS(ADC) == 1) {
/* Clear the ADC flag overrun of Down Sampler */
LL_ADC_ClearFlag_OVRDS(ADC);
/* Turn on the LED2 is overrun occurs */
BSP_LED_On(BSP_LED2);
}
}
#endif
然后把这个函数放到了APP_Tick()中,结果并没有实现
是我aci_gatt_clt_write_without_resp()应用的不对吗?还是思路有问题?
引用: littleshrimp 发表于 2021-4-21 17:14 你的adcadcadc函数在#if CLIENT宏定义里边,在这个例程你是使用的CLIENT模式吗? 还有调试的时候能读到 ...
是使用的CLIENT,主机可以串口输出数据,从机没有收到,两个个还能互相串口通信
引用: haha丶 发表于 2021-4-21 17:20 是使用的CLIENT,主机可以串口输出数据,从机没有收到,两个个还能互相串口通信
先试试分开处理,先看看ADC读到的数据是否正常排除ADC的问题,或者使用一个固定的变量替代ADC数据看能否正常发送排除蓝牙通信部分问题。
引用: haha丶 发表于 2021-4-21 22:15 应该是aci_gatt_clt_write_without_resp()这个函数用的不对吧,我不管怎么写,从机都收不到数据
解决了,确实是那个函数使用错误,低级错误
引用: littleshrimp 发表于 2021-4-21 17:55 先试试分开处理,先看看ADC读到的数据是否正常排除ADC的问题,或者使用一个固定的变量替代ADC数据看能否 ...
非常感谢您的帮助
看着你们解决问题,真好~