1.串口轮询部分。通过如下代码调串口回调函数。
if (cnt >= HAL_UART_DMA_FULL)
{
evt = HAL_UART_RX_FULL;
}
else if (cnt >= HAL_UART_DMA_HIGH)
{
evt = HAL_UART_RX_ABOUT_FULL;
PxOUT |= HAL_UART_Px_RTS;
}
else if (cnt && !dmaCfg.rxTick)
{
evt = HAL_UART_RX_TIMEOUT;
但是我们希望当收到一条指令,大概8~10个字节,接收完就调回调函数。如果设置
if (cnt >= 8)
{
evt = HAL_UART_RX_IND;
}
则会出现DMA未接收完就调用回调函数的情况,则会出现接收错误。如果将cnt>24,则势必会在缓冲区堵塞一条指令。
想问一下,如何判断DMA串口接收完成?
我理解的是根据DMAIRQ寄存器中,DMAIF的状态位来判断,但硬件调试的过程中,一直没发现变为1的情况,所以,无法用来判断接收完成。
2.程序中,电源电压检测部分,BattMeasure函数中,
HalAdcSetReference( HAL_ADC_REF_125V );
adc = HalAdcRead( HAL_ADC_CHANNEL_VDD, HAL_ADC_RESOLUTION_10 );
adc测量的数,换算成电压值后,和用稳压电源输出的电压值(搭配着万用表测量电压),有大致0.1V的误差,当电压逼近2.0V时,误差会减小。
很想问一下,这是什么原因?
是CC2540adc检测过程中不可避免的误差还是什么原因造成的?如果恒定误差有0.1V的话,在程序中电量检测部分,可以做出调整,否则低电量报警也会导致误差。
希望能有一个官方的说法。
非常希望技术支持给予答复,非常感谢您的帮助。