FR3068片内配有A/D数模转换功能,提供它可将模拟信号转换为数字信号,在例程中提供了进行多通道数据采集的示例。

在主程序为时,可对通道0至通道3的三个通道进行采集。

<pre>int main(void)
  • {
  •     GPIO_InitTypeDef GPIO_Handle;  
  •     pmu_init();
  •     system_clock_config();
  •     GPIO_Handle.Pin       = GPIO_PIN_4|GPIO_PIN_5;
  •     GPIO_Handle.Mode      = GPIO_MODE_AF_PP;
  •     GPIO_Handle.Pull      = GPIO_PULLUP;
  •     GPIO_Handle.Alternate = GPIO_FUNCTION_1;
  •     gpio_init(GPIOB, &GPIO_Handle);
  •     Uart3_handle.UARTx = UART3;
  •     Uart3_handle.Init.BaudRate   = 115200;
  •     Uart3_handle.Init.DataLength = UART_DATA_LENGTH_8BIT;
  •     Uart3_handle.Init.StopBits   = UART_STOPBITS_1;
  •     Uart3_handle.Init.Parity     = UART_PARITY_NONE;
  •     Uart3_handle.Init.FIFO_Mode  = UART_FIFO_ENABLE;
  •     uart_init(&Uart3_handle);   
  •     printf("\r\n");
  •     printf("SystemCoreClock:%d\r\n",   system_get_CoreClock());
  •     printf("SystemDSPClock:%d\r\n",    system_get_DSPClock());
  •     printf("System_CORE_HSCLK:%d\r\n", system_get_CORE_HSCLK());
  •     printf("System_SPLLCLK:%d\r\n",    system_get_SPLLCLK());
  •     printf("System_AUPLLCLK:%d\r\n",   system_get_AUPLLCLK());
  •     adc_demo(ADC_HARDWARE_TRIGGER_LOOP_MODE);     
  •     while(1);
  • }
  • </pre>
  • 复制代码

    比较有意思的是,它的初始化与检测程序,其内容如下:

    <pre>InitConfig.saradc_reference = SARADC_REF_IOLDO;
  • InitConfig.saradc_sampling_cycle = 16;
  • InitConfig.saradc_clock_div = 24;
  • InitConfig.saradc_interval_clock_div = 10;
  • InitConfig.saradc_voltage_divider = SARADC_VOLTAGE_DIVIDER_BYPASS;
  • InitConfig.saradc_mode = SARADC_LOOP_MODE;
  • saradc_init(&InitConfig);
  • LoopConfig.loop_triggerMode = SARADC_TRIGGER_HARDWARE;
  • LoopConfig.loop_max_channel = 3;
  • LoopConfig.loop_interval = 4000;
  • LoopConfig.loop_FIFO_enable = SARADC_FIFO_DISABLE;
  • saradc_loop_config(&LoopConfig);
  • saradc_channel_single_config(SARADC_CHANNEL_0, ADC_CH_MAP_PMU_IO2);
  • saradc_channel_single_config(SARADC_CHANNEL_1, ADC_CH_MAP_PMU_IO3);
  • saradc_channel_single_config(SARADC_CHANNEL_2, ADC_CH_MAP_PMU_IO4);
  • printf("hardware trigger convert\r\n");
  • saradc_loop_convert_start();
  • while(1)
  • {
  •        if (saradc_get_int_raw_status() & SARADC_INT_STATUS_LOOP)
  •        {
  •              saradc_int_status_clear(SARADC_INT_STATUS_LOOP);
  •              printf("logic channel0: %d\r\n", saradc_get_channel_data(SARADC_CHANNEL_0));
  •              printf("logic channel1: %d\r\n", saradc_get_channel_data(SARADC_CHANNEL_1));
  •              printf("logic channel2: %d\r\n", saradc_get_channel_data(SARADC_CHANNEL_2));
  •        }
  • }</pre>
  • 复制代码

    从这里终于发现了对引脚PP0和PP2的所用方法,而它正是开发板上2个按键所占用的引脚,见图1所示。

    image.png

    image.png

    图1 按键所用引脚


    经程序的编译与下载,的确可用按键来验证数据的采集,其结果如图2和图3所示。

    image.png

    图2  K2键按下时


    image.png

    图3 PP4接地时


    以多通道数据采集为基础,在添加NTC温度传感器模块的情况下,经线性处理,则可以轻松地实现温度的检测和控制。