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所示。
图1 按键所用引脚
经程序的编译与下载,的确可用按键来验证数据的采集,其结果如图2和图3所示。
图2 K2键按下时
图3 PP4接地时
以多通道数据采集为基础,在添加NTC温度传感器模块的情况下,经线性处理,则可以轻松地实现温度的检测和控制。