Garys 发表于 2023-6-5 15:42

针对HC32L110的使用ADC进行电压数据采集,uart数据收发异常

就是使用这个hc32l110的ADC模块来进行电压数据采集,然后把数据通过uart在串口上打印。但是不知道为什么我写的代码在获取电压数据,打印出来一直为0,电路是没什么问题的。
#include "ddl.h"
#include "uart.h"
#include "bt.h"
#include "lpm.h"
#include "gpio.h"
#include "adc.h"



#define   T1_PORT               (3)
#define   T1_PIN                  (3)


staticuint16_t u16ScanResult;
uint8_t u8Rx**=0;
uint8_t Check**=0;
uint8_t u8RxData={0x11,0x22,0X33};

void AdcContIrqCallback(void)
{   
    Adc_GetScanResult(0,&u16ScanResult);

    M0P_ADC->CR0_f.STATERST = 1u;

    M0P_BT1->ICLR_f.TFC = 0;
}

void RxIntCallback(void)
{
                u8RxData=M0P_UART1->SBUF;
          u8Rx** = 1;
}



void ErrIntCallback(void)
{

}

void AdcRegIrqCallback(void)
{   

}

void AdcHhtIrqCallback(void)
{   

}

void AdcLltIrqCallback(void)
{   

}

int32_t main(void)
{
       
           uint16_t timer=0;
    uint32_t pclk=0;
          uint16_t                  u16ArrData2;
    uint16_t                  u16InitCntData2;
                stc_adc_cfg_t             stcAdcCfg                                ;
    stc_adc_scan_cfg_t      stcAdcScanCfg                ;
    stc_adc_irq_t             stcAdcIrq                                ;
    stc_adc_irq_calbakfn_pt_t stcAdcIrqCalbaks;
    stc_bt_config_t         stcBtConfig                        ;
                stc_uart_config_t                           stcConfig                                ;       
    stc_uart_irq_cb_t                                 stcUartIrqCb                ;
    stc_uart_multimode_t                         stcMulti                                ;
    stc_uart_baud_config_t          stcBaud                                        ;
          


    DDL_ZERO_STRUCT(stcAdcCfg);
    DDL_ZERO_STRUCT(stcAdcScanCfg);
    DDL_ZERO_STRUCT(stcAdcIrq);
    DDL_ZERO_STRUCT(stcAdcIrqCalbaks);
       
          DDL_ZERO_STRUCT(stcUartIrqCb);
    DDL_ZERO_STRUCT(stcMulti);
    DDL_ZERO_STRUCT(stcBaud);
    DDL_ZERO_STRUCT(stcBtConfig);
       
    Clk_SwitchTo(ClkRCL);
    Clk_SetRCHFreq(ClkFreq24Mhz);
    Clk_SwitchTo(ClkRCH);            


    Gpio_SetAnalog(2, 4, TRUE);
               
                Adc_Enable();
    M0P_BGR->CR_f.BGR_EN = 0x1u;   
    M0P_BGR->CR_f.TS_EN = 0x0u;   
    delay100us(1);

    stcAdcCfg.enAdcOpMode                           = AdcScanMode;            
    stcAdcCfg.enAdcClkSel                           = AdcClkSysTDiv1;         
    stcAdcCfg.enAdcSampTimeSel          = AdcSampTime8Clk;   
    stcAdcCfg.enAdcRefVolSel                  = RefVolSelAVDD;         
    stcAdcCfg.bAdcInBufEn                           = FALSE;                  
    stcAdcCfg.enAdcTrig0Sel                   = AdcTrigTimer2;         
    stcAdcCfg.enAdcTrig1Sel                   = AdcTrigDisable;
    Adc_Init(&stcAdcCfg);         
                                                                                                                                  
    stcAdcIrq.bAdcIrq               = TRUE;                           
    stcAdcIrq.bAdcRegCmp            = FALSE;
    stcAdcIrq.bAdcHhtCmp            = FALSE;
    stcAdcIrq.bAdcLltCmp            = FALSE;
    stcAdcIrqCalbaks.pfnAdcContIrq= AdcContIrqCallback;
    stcAdcIrqCalbaks.pfnAdcRegIrq   = AdcRegIrqCallback;
    stcAdcIrqCalbaks.pfnAdcHhtIrq   = AdcHhtIrqCallback;
    stcAdcIrqCalbaks.pfnAdcLltIrq   = AdcLltIrqCallback;
    Adc_ConfigIrq(&stcAdcIrq, &stcAdcIrqCalbaks);      
    Adc_EnableIrq();                                    
    Adc_CmpCfg(&stcAdcIrq);                           

    stcAdcScanCfg.u8AdcScanModeCh         =ADC_SCAN_CH1_EN;
               
                stcAdcScanCfg.u8AdcSampCnt = 0x1;                  
    Adc_ConfigScanMode(&stcAdcCfg, &stcAdcScanCfg);

    Gpio_InitIO(T1_PORT,T1_PIN,GpioDirIn);
    Gpio_InitIO(0,3,GpioDirOut);
    Gpio_SetIO(0,3,1);

    Gpio_InitIOExt(3,5,GpioDirOut,TRUE,FALSE,FALSE,FALSE);   
    Gpio_InitIOExt(3,6,GpioDirOut,TRUE,FALSE,FALSE,FALSE);


    Gpio_SetFunc_UART1TX_P35();
    Gpio_SetFunc_UART1RX_P36();
               
                Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);
    Clk_SetPeripheralGate(ClkPeripheralUart1,TRUE);
                if (Ok != Clk_SetPeripheralGate(ClkPeripheralAdcBgr, TRUE))
    {
      return Error;
    }

    stcUartIrqCb.pfnRxIrqCb      = RxIntCallback;
    stcUartIrqCb.pfnTxIrqCb      = NULL;
    stcUartIrqCb.pfnRxErrIrqCb   = ErrIntCallback;
    stcConfig.pstcIrqCb                                       = &stcUartIrqCb;
    stcConfig.bTouchNvic                                        = TRUE;


    stcConfig.enRunMode = UartMode3;


    stcMulti.enMulti_mode = UartNormal;

    stcConfig.pstcMultiMode = &stcMulti;

    stcBaud.bDbaud = 0u;
    stcBaud.u32Baud = 2400U;
    stcBaud.u8Mode = UartMode3;
    pclk = Clk_GetPClkFreq();
    timer=Uart_SetBaudRate(UARTCH1,pclk,&stcBaud);

    stcBtConfig.enMD    = BtMode2;
                stcBtConfig.enCT    = BtTimer;
        Bt_ClearIntFlag(TIM1);
        Bt_EnableIrq(TIM1);

    Bt_Init(TIM1, &stcBtConfig);
    Bt_ARRSet(TIM1,timer);
    Bt_Cnt16Set(TIM1,timer);

    Uart_Init(UARTCH1, &stcConfig);
    Uart_EnableIrq(UARTCH1,UartRxIrq);
    Uart_ClrStatus(UARTCH1,UartRxFull);
    Uart_EnableFunc(UARTCH1,UartRx);
               
                stcBtConfig.enGateP = BtPositive;
    stcBtConfig.enGate= BtGateDisable;   
    stcBtConfig.enPRS   = BtPCLKDiv256;   
    stcBtConfig.enTog   = BtTogDisable;   
    stcBtConfig.enCT    = BtTimer;
    stcBtConfig.enMD    = BtMode2;

    Bt_Init(TIM2, &stcBtConfig);

    Bt_ClearIntFlag(TIM2);
    Bt_EnableIrq(TIM2);

    u16ArrData2 = 0x10000 - 9375;      
    u16InitCntData2 = 0x10000 - 9375;
    Bt_ARRSet(TIM2, u16ArrData2);
    Bt_Cnt16Set(TIM2, u16InitCntData2);
    Bt_Run(TIM2);
                Bt_Run(TIM1);
       
    while(1)
        {
                Adc_Start();
          Check** = 0;
                u8RxData = (u16ScanResult >> 8 );
                u8RxData = (u16ScanResult & 0xFF);
                if(u8Rx**)
                {
                        u8Rx** = 0;
                       
                        if(Uart_CheckEvenOrOdd(UARTCH1,Even,u8RxData)!=Ok)
                        {
                                Check** = 1;
                        }
                        else
                        {
                               
                                Uart_SetTb8(UARTCH1,Even,u8RxData);
                          Uart_SendData(UARTCH1,u8RxData);                               
                          Uart_SetTb8(UARTCH1,Even,u8RxData);
                          Uart_SendData(UARTCH1,u8RxData);
                                Uart_SetTb8(UARTCH1,Even,u8RxData);
                          Uart_SendData(UARTCH1,u8RxData);
                        }
                }
        }

}

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOoAAAAzCAYAAACZpZSpAAAK/0lEQVR4Ae2WgY7ruA5D7///9D5o953ZA0KKnSade2ebAAFFiqJdt8bMr7+e5y0n8OvXr7/q7Z5J77yP9pxAnUD/S3rO5pYT8IV0fUv4/0PelXvnHp+s6yfw90WtL5v3euRnJHBeviiu6xRW/OpJkQ9ezfuO+drr6v2Offy0Nb4uarfx/AF0B9zNWfPMjm6P6y7HGrVnuhpfIY81anqg/WiF1l1nzzN31DtrlSdf1raONqG91HjhhTvPyrfq76zxX/SMF5UvwB/67CGmHw6SnRwdzD4cLJ9r5hLTAwennOrb41zr+HbQGVk7M3vFp37qyclKPTk+cOqnnpx548qz6jvrk+rxotYh5KElz4PK/sQnnbzso4Ndv9PwT9jNpAYHM+usnvMTr9wuu9Oc4b7ryVP65GNm6qeenHnjyrPqO+uT6tMXtQ6Sd3VQeehwkPnk6Inl67ydlrPmZ3LIBp1T9Vnd8+xjB4/WcqZ9mWufe9a72t6q/bhnfapzPn2rfvo/hZ+6qHkoq0PNvnnVfjP7iDunfMmPZt3LuSOePXKO9Orly9wKmUvftB6+oz49cGcGj5F5kF5ydOPKs+o765Pq33ZRfchnv5z0J3f2UZ1zyWu2NL+ZN80wa3/ndZ965Zv6k5656UuOf0L8IL7k6MaVZ9V31ifVpy5qHmLyPLjsm091ZhS3d4d3GTtzuY5zpl6nW6MGnXmlzrzkR583vclzX9mHg/iToxtXnlXfWZ9Ujxe1DozXB4LWHeikMfOOnMqc1vV61OzlzAxr7MzseNjLVWQtsMurHq/7aEezO/4rOZ517XWf+p8T+LqoHNRzMHsnwHkV8rguDU/W+O/AXPOOzCfjzzuBf39lf97efuyOfEHzQxz10vvw5wQ4geeichI3o//Sub55mfbf/rvXePJ+/wk8//q++B3wl9GXcKd+cbl2rNtDa3zEH38CXxe1+yT+4VXfPwzqbs4avqMs+6e6y7FGPc2j4yv0c1Zn1jk7NXNX0ful7jLpeW/lm/Qu48h/Jsde6swufedhPv2TPmVO/knvcuylLh812M3uauNF7cJLO/OkHw6SlRwdzD4cLJ9r5hLTAwfxw8HU4YX2HNXV8+sMas+jdeicrO3PPDiINzk6mH04OPnQjZ7ZqT1L7bnS4ODkQwcn/6Qz16Fnduou40gbL2oNecGOZ/DKTx9kfsXxgekvvdPwT8gMiA8Opg4vtKerraWfnPKkj14i3iNkJjPh4ORDByf/pDPXITMgHnPX9I3Zh4N4k6OD2YeDkw/dyAxIz9w1/V08fVFrMd7VIrkxOMh8cvTE8nXeTstZ88zJeTjIbPLSrWUNBzt/9XZeZne8rAfm/icdX+Lkn/ScN68Z3tThmYsOZh8OTj50cPJPOnMd1gyv+85ybc9OfeqiZuBq4eybV+03s4+4c8qX/GjWPc95L+ggM8lzbfd3aufaj95h+VYvc5kJBycfOjj5J525DpkB8Zi7pm/MPhzEmxwdzD4cnHzoRmZAeuau6e/ib7uo3uDZD5D+5M4+qqc5dJCM5KVboy6ktscamcZVHy/5HeIpzDw4iDc5Oph9ODj50I05Q8+6a/rG7MNBvMnRwezDwcmHbswZetZd09/FUxc1F0qei2bffKozo7i9O7zLWM15DWqQvOSZWX084NEsvVeQtYyZM+1h0nMePvknnbkOcwaPddf0jdmHg3iTo4PZh4OTD92YM/Ssu6a/i+NFrVBeh6F1i04aM+/IqcxpXa9HzV5y5qzuvN0612TuVZz27LzJM+medT35J92z1JPXetU7j2fsn3R7XE/+Sfcs9eS1XvWV5+uiEnol7JNmOa/pC0AHOZvk6K/i3Xmv7uOZe+8JXLvm793bj06vCzRdokn/0R/42fxbT+C5qG88Xl9I13cu+a7cO/f4ZF0/gedf3xfPsC4ILxF5aVacuVeRfPDVnO+cq72u3u/cz09Z6+uidhvOH0B3wN2cNc/s6Pa47nKsUXumq/EV8lij7npoxsyZetbvqL1u5SVH4/OArA3v5vCA9lJ3PbQjXK236h9l/5d740XNL6QO4ewhph8OcrDJ0cHsw8HdvU3+HX1aI2eL77x8tg6deaafc8nJSj05PnDqp56ceePKs+o765Pq8aLWIeShJc+Dyv7EJ5287KODXb/T8INnPelPXrmddqSzlxVWbpfdac5y3/XkKX3yMTP1U0/OvHHlWfWd9Un16YtaB8m7Oqg8dDjIfHL0xPJ13k7L2eLMg+k5ypl6Z3WvyT52kP17fqrZU+ba7571rraXbHzuoR1hzqd31U//p/BTFzUPZXWo2Tev2m9mH3HnlC/5NJu+FScnfehHa9dM93r2qGY2PUd7OdqPe5mRPNdMjh+knxzduPKs+s76pPq3XVQf8tkvJ/3Jne06fStes+lx3tRnBmQmOXriyjf1J518+mDq8BUyD+JPjm5ceVZ9Z31Sfeqi5iEmz4PLvvlUZ0Zxe3d4l7Ezt1qny82ZXIc+2GW8omVe8tyHeXqT536yDwfxJ0c3rjyrvrM+qR4vah0Yrw8ErTvQSWPmHTmVOa3r9ajZy86MvdTkgJmTvHydxvwVJBfssqrH6z7a0eyO/0qOZ1173af+5wS+LioH9RzM3glwXoU8rkvDkzX+OzDXvCPzyfjzTuDfX9mft7cfuyNf0PwQR730Pvw5AU7guaicxM3ov3Sub17mbf9W373PJ+/aCTz/+r54fvxl9CXcqV9crh3r9tAaH/HHn8DXRe0+iX941fcPg7qbs4bvKMv+qe5yrFFP8+j4Cv1MennSm3Nw+6Ya71X0fqm7THreT/kmvcs48p/JsZc6s0vfeZhP/6RPmZN/0rsce6nLRw12s7vaeFG78NLOPOmHg2QlRwezDwfL55q5RHumOrPKZ+8rmWQYMyfX7fpozskaT5dX3iPds66ZQ4ODqcM79MxOvcqoPjkgM8nRwezDwcmHbvTMTu3ZnXq8qDXsBTueC6z89EHmVxwfmP7SOw0/OHlSX3Hycl3PUYPMJCej05kxlm/14s9MODj50MHJP+nMdcgMiMfcNX1j9uEg3uToYPbh4ORDNzID0jN3TX8XT1/UWox3tUhuDA4ynxw9sXydt9NytjjzoD1oXVanMete1nCQPXi2ejsvszte1gO9HjloHXev65ML4k+ObiwPb+rwVU724eB359R6tTYv66PDc3/oO3jqombgauHsm1ftN7OPuHPKl3yaTR8cZG7F8eXantupySmv/egd4j1C5jITDk4+dHDyTzpzHTID4jF3Td+YfTiINzk6mH04OPnQjcyA9Mxd09/F33ZRvcGzHyD9yZ3tOn1wEO+K4yu0l7qQ2h5rzqBe9e1jjUQ8hZkHB/EmRwezDwcnH7oxZ+hZd03fmH04iDc5Oph9ODj50I05Q8+6a/q7eOqi5kLJc9Hsm091ZhS3d4d3GUdzV/I9WzUcZC/J0V9F1jJmVq4JB/EnRwezDwcnH7oxZ+hZd03fmH04iDc5Oph9ODj50I05Q8+6a/q7OF7UCuV1GFq36KQx846cypzW9XrU7CVnzurO261zTeZexWnPzps8k+5Z15N/0j1LPXmtV73zeMb+SbfH9eSfdM9ST17rVV95vi4qoVfCPmmW85q+AHSQs0mO/irenffqPp65957AtWv+3r396PS6QNMlmvQf/YGfzb/1BJ6L+sbj9YV0feeS78q9c49P1vUTeP71ffEM64LwEpGXZsWZexXJB1/N+c652uvq/c79/JS1/gdWg9koA9hVeQAAAABJRU5ErkJggg==

liuyuxiier 发表于 2023-6-5 16:21

代码太长啦,建议把问题分割一下,缩小一下问题范围,所谓授人以鱼不如授人以渔,
你这里涉及两个主要功能,一个是ADC采集,一个是串口发送。
先排查ADC是否能正常采集到电压。使用仿真器,观察ADC结果寄存器有没有数据。
如果ADC结果寄存器没有数据,那就检查ADC的配置,比如端口配置,ADC时钟,ADC通道配置,模式配置,触发配置等等。
如果ADC结果寄存器有数据,那就检查USART配置,可以先给一组固定的数据看看能够正常打印。
如果能正常打印,就重点检查ADC结果寄存器的读取与数据转换。

以上步骤可以把问题缩小到一定的范围,你再精准的把问题提出来,大家也会有针对性的帮你解决问题了。祝好运。

wubangmi 发表于 2023-6-6 09:32

u8RxData = (u16ScanResult >> 8 );
u8RxData = (u16ScanResult & 0xFF);
你认真考虑下上面这两条语句放在while死循环里直接运行会产生什么效果?
可能几个微秒就执行一次。u8RxData[]这个数组极大部分时间都是等于0.

xch 发表于 2023-6-6 11:07

ADC 和 UART 得分开测试。要不然都是临时工的责任。

xch 发表于 2023-6-6 16:21

本帖最后由 xch 于 2023-6-6 16:29 编辑

ADC 模拟信号输入引脚是哪个?

对应的初始化代码是哪段?
P24?


wubangmi 发表于 2023-6-6 17:08

本帖最后由 wubangmi 于 2023-6-6 17:18 编辑

楼主这个整合能力还有待提高,还要多研究相对应的用户手册。

tpgf 发表于 2023-7-6 11:56

能在程序里边看到采集到的数据是不是正确的呢

paotangsan 发表于 2023-7-6 13:13

能确定一下就是获取的电压数据是不是正确的呢

wakayi 发表于 2023-7-6 13:53

不用ad采集的话直接让串口发送固定数据 观察一下现象

heimaojingzhang 发表于 2023-7-6 18:59

楼主看一下发送数据缓冲里边的数据是什么

keaibukelian 发表于 2023-7-6 19:29

用示波器看一下实际发送的数据是不是正确

renzheshengui 发表于 2023-7-6 19:56

楼主可以先不发送 看一下采集的数据是不是正确的
页: [1]
查看完整版本: 针对HC32L110的使用ADC进行电压数据采集,uart数据收发异常