N32G032K8L7ADC连续转换1,2,3通道示例代码
时间: 2023-10-15 11:02:03 浏览: 35
以下是N32G032K8L7ADC连续转换1,2,3通道的示例代码:
```c
#include "n32g032.h"
void ADC_Config(void)
{
/* 使能 ADC 时钟 */
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
/* 设置 ADC 时钟分频为 8*/
RCC->CFGR2 &= ~RCC_CFGR2_ADCPRE12_Msk;
RCC->CFGR2 |= RCC_CFGR2_ADCPRE12_DIV8;
/* 配置 ADC 通道 1、2、3 */
ADC1->SQR1 &= ~ADC_SQR1_L_Msk; // 转换序列长度为 3
ADC1->SQR3 = 0x01; // 转换通道 1
ADC1->SQR3 |= (0x02 << 5); // 转换通道 2
ADC1->SQR3 |= (0x03 << 10); // 转换通道 3
/* 配置 ADC 为连续转换模式 */
ADC1->CR2 &= ~ADC_CR2_CONT_Msk;
ADC1->CR2 |= ADC_CR2_CONT;
/* 开启 ADC */
ADC1->CR2 |= ADC_CR2_ADON;
}
int main(void)
{
ADC_Config();
while (1)
{
/* 开始转换 */
ADC1->CR2 |= ADC_CR2_SWSTART;
/* 等待转换完成 */
while (!(ADC1->SR & ADC_SR_EOC));
/* 读取转换结果 */
uint16_t result1 = ADC1->DR;
/* 开始转换 */
ADC1->CR2 |= ADC_CR2_SWSTART;
/* 等待转换完成 */
while (!(ADC1->SR & ADC_SR_EOC));
/* 读取转换结果 */
uint16_t result2 = ADC1->DR;
/* 开始转换 */
ADC1->CR2 |= ADC_CR2_SWSTART;
/* 等待转换完成 */
while (!(ADC1->SR & ADC_SR_EOC));
/* 读取转换结果 */
uint16_t result3 = ADC1->DR;
/* 处理转换结果 */
// TODO
}
}
```
在这个示例代码中,我们首先使用 `ADC_Config()` 函数配置 ADC。在此函数中,我们使能了 ADC 时钟,设置了 ADC 时钟分频为 8,配置了 ADC 通道 1、2、3,并将 ADC 配置为连续转换模式。
然后,在主函数中,我们不断循环执行 ADC 转换操作。在每次循环中,我们先启动 ADC 转换,然后等待转换完成,并读取转换结果。注意,这里我们使用了 `while (!(ADC1->SR & ADC_SR_EOC))` 来等待转换完成。`ADC_SR_EOC` 是 ADC 转换完成标志位,当转换完成时,该标志位被置位为 1。因此,我们可以通过检查该标志位来等待转换完成。
最后,我们处理转换结果。在这个示例代码中,我们只是简单地将转换结果存储在变量 `result1`、`result2` 和 `result3` 中。您可以根据实际需求进行处理。