日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

GD32F303固件庫開發(fā)(10)----雙ADC輪詢模式掃描多個通道

發(fā)布者:EternalSunset最新更新時間:2024-11-19 來源: elecfans關(guān)鍵字:GD32F303  固件庫開發(fā)  雙ADC 手機看文章 掃描二維碼
隨時隨地手機看文章

概述

本章主要配置,雙ADC輪詢模式掃描多個通道,通過串口進行打印。 查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。 查閱手冊可以得知,PA9、PA10為串口0的輸出和輸入口。需要GD樣片的可以加Q_qun申請:6_15061293 。

在這里插入圖片描述


樣品申請

https://www.wjx.top/vm/wFGhGPF.aspx#


硬件準備

這里準備了1塊開發(fā)板進行驗證,分別是GD32303C_START開發(fā)板。

在這里插入圖片描述

keil配置

microlib 進行了高度優(yōu)化以使代碼變得很小。 它的功能比缺省 C 庫少,并且根本不具備某些 ISO C 特性。 某些庫函數(shù)的運行速度也比較慢,如果要使用printf(),必須開啟。

在這里插入圖片描述

使能串口

/* 使能GPI0A,用PA9、PA10為串口 */

    rcu_periph_clock_enable(RCU_GPIOA);


    /*使能串口0的時鐘 */

    rcu_periph_clock_enable(RCU_USART0);


    /*配置USARTx_Tx(PA9)為復用推挽輸出*/

    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);


    /*配置USARTx_RxPA9)為浮空輸入 */

    gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);


    /* USART 配置 */

    usart_deinit(USART0);//重置串口0

    usart_baudrate_set(USART0, 115200U);//設置串口0的波特率為115200

    usart_word_length_set(USART0, USART_WL_8BIT);          // 幀數(shù)據(jù)字長

        usart_stop_bit_set(USART0, USART_STB_1BIT);               // 停止位1位

    usart_parity_config(USART0, USART_PM_NONE);           // 無奇偶校驗位

    usart_receive_config(USART0, USART_RECEIVE_ENABLE);//使能接收器

    usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);//使能發(fā)送器

    usart_enable(USART0);//使能USART

串口重定向

/* retarget the C library printf function to the USART */

int fputc(int ch, FILE *f)

{

    usart_data_transmit(USART0, (uint8_t)ch);

    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));

    return ch;

}


串口重定向后就可以使用printf進行打印。

ADC通道設置

在這里插入圖片描述

在這里插入圖片描述


ADC0初始化

///*************時鐘配置******************/


    /*使能GPIOA時鐘 */

    rcu_periph_clock_enable(RCU_GPIOA);

    /*使能ADC時鐘 */

    rcu_periph_clock_enable(RCU_ADC0);

    /* 配置ADC速率 */

    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

ADC0配置

/*------------------ADC GPIO配置------------------*/

// 必須為模擬輸入

    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);


/*------------------ADC工作模式配置------------------*/

        // 設置adc工作在獨立模式

        adc_mode_config(ADC_MODE_FREE);

        // 多通道用掃描模式

        //    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);

        // 單通道用連續(xù)轉(zhuǎn)換模式

//        adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); 



        // 結(jié)果轉(zhuǎn)換右對齊

        adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);

        // 轉(zhuǎn)換通道1個

        adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 3);


    /* ADC regular channel config */

    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_0, ADC_SAMPLETIME_55POINT5);

    adc_regular_channel_config(ADC0, 1, ADC_CHANNEL_1, ADC_SAMPLETIME_55POINT5);

    adc_regular_channel_config(ADC0, 2, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);



        // 不用外部觸發(fā)轉(zhuǎn)換,軟件開啟即可

        adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);

        adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);


        // 使能ADC

        adc_enable(ADC0);

        delay_1ms(1);                                                   // 等待1ms

        // 使能ADC校準

        adc_calibration_enable(ADC0);

ADC1初始化

/*************時鐘配置******************/


    /*使能GPIOA時鐘 */

    rcu_periph_clock_enable(RCU_GPIOB);

    /*使能ADC時鐘 */

    rcu_periph_clock_enable(RCU_ADC1);

    /* 配置ADC速率 */

    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

ADC1配置

/*------------------ADC GPIO配置------------------*/

// 必須為模擬輸入

    gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_7);

    gpio_init(GPIOB, GPIO_MODE_AIN, GPIO_OSPEED_MAX, GPIO_PIN_0 | GPIO_PIN_1);

/*------------------ADC工作模式配置------------------*/

        // 設置adc工作在獨立模式

        adc_mode_config(ADC_MODE_FREE);

        // 多通道用掃描模式

        //    adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);

        // 單通道用連續(xù)轉(zhuǎn)換模式

//        adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); 



        // 結(jié)果轉(zhuǎn)換右對齊

        adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);

        // 轉(zhuǎn)換通道1個

        adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 3);


    /* ADC regular channel config */

    adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_7, ADC_SAMPLETIME_55POINT5);

    adc_regular_channel_config(ADC1, 1, ADC_CHANNEL_8, ADC_SAMPLETIME_55POINT5);

    adc_regular_channel_config(ADC1, 2, ADC_CHANNEL_9, ADC_SAMPLETIME_55POINT5);



        // 不用外部觸發(fā)轉(zhuǎn)換,軟件開啟即可

        adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);

        adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);


        // 使能ADC

        adc_enable(ADC1);

        delay_1ms(1);                                                   // 等待1ms

        // 使能ADC校準

        adc_calibration_enable(ADC1);

ADC數(shù)據(jù)采集

uint16_t  get_adc(uint32_t adc_periph , uint8_t adc_channel)

{

/* 配置規(guī)則通道采集*/

    adc_regular_channel_config(adc_periph, 0, adc_channel, ADC_SAMPLETIME_55POINT5);

        // 由于沒有采用外部觸發(fā),所以使用軟件觸發(fā)ADC轉(zhuǎn)換

        adc_software_trigger_enable(adc_periph, ADC_REGULAR_CHANNEL);   


        while(!adc_flag_get(adc_periph, ADC_FLAG_EOC));                       // 等待采樣完成

        adc_flag_clear(adc_periph, ADC_FLAG_EOC);                             // 清除結(jié)束標志


        return  adc_regular_data_read(adc_periph);                         // 讀取ADC數(shù)據(jù)

}

數(shù)據(jù)采集

while (1){


        uint16_t adc0Value0 = 0;

        uint16_t adc0Value1 = 0;

        uint16_t adc0Value2 = 0;


        adc0Value0=get_adc(ADC0 ,ADC_CHANNEL_0);

        adc0Value1=get_adc(ADC0 ,ADC_CHANNEL_1);

        adc0Value2=get_adc(ADC0 ,ADC_CHANNEL_2);



    printf('\nadc0_IN0(PA0)=%4.0d,電壓=%1.4f',adc0Value0,adc0Value0*3.3f/4095);

    printf('\nadc0_IN1(PA1)=%4.0d,電壓=%1.4f',adc0Value1,adc0Value1*3.3f/4095);

    printf('\nadc0_IN2(PA2)=%4.0d,電壓=%1.4f',adc0Value2,adc0Value2*3.3f/4095);


        uint16_t adc1Value0 = 0;

        uint16_t adc1Value1 = 0;

        uint16_t adc1Value2 = 0;


        adc1Value0=get_adc(ADC1 ,ADC_CHANNEL_7);

        adc1Value1=get_adc(ADC1 ,ADC_CHANNEL_8);

        adc1Value2=get_adc(ADC1 ,ADC_CHANNEL_9);


    printf('\nadc1_IN7(PA7)=%4.0d,電壓=%1.4f',adc1Value0,adc1Value0*3.3f/4095);

    printf('\nadc1_IN8(PB0)=%4.0d,電壓=%1.4f',adc1Value1,adc1Value1*3.3f/4095);

    printf('\nadc1_IN9(PB1)=%4.0d,電壓=%1.4f',adc1Value2,adc1Value2*3.3f/4095);

    delay_1ms(1000);                    

    }


測試結(jié)果

輸入固定電壓進行測試。

在這里插入圖片描述

測試結(jié)果如下。

在這里插入圖片描述


關(guān)鍵字:GD32F303  固件庫開發(fā)  雙ADC 引用地址:GD32F303固件庫開發(fā)(10)----雙ADC輪詢模式掃描多個通道

上一篇:GD32F103C8單片機的PWM輸出試驗
下一篇:GD32F103C8T6 Uart3無法發(fā)送數(shù)據(jù)

推薦閱讀最新更新時間:2025-08-05 06:36

《嵌入式-STM32開發(fā)指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube產(chǎn)品介紹
自STM32標準庫出道以來,備受廣大工程師和公司的喜愛,但是,從2013年開始,ST逐漸停止了對標準外設庫的更新和維護。目前,ST全力推崇HAL庫,STM32Cube就是與HAL庫配合使用圖形化編程官方IDE。 7.1 STM32庫簡介 到目前為止,ST有標準外設庫(SPL 庫)、HAL 庫、LL 庫 三種。前兩者都是常用的庫,后面的 LL 庫是 ST 最近才添加,隨 HAL 源碼包一起提供,目前支持的芯片也偏少。各庫如下所示: 圖1 標準庫、HAL 庫、LL 庫對比.png 其中,SPL 庫 和 HAL 庫兩者相互獨立,互不兼容。幾種庫的比較如下: 圖2各個庫對比.png 目前幾種庫對不同芯片的支持情況如下: 圖
[單片機]
GD32F303學習筆記(1)——搭建環(huán)境、編譯燒寫
一、搭建環(huán)境 1.1 官方資料 GD32F30x 資料下載 1.2 安裝Keil 5 官網(wǎng)下載:http://www2.keil.com/mdk5/ 百度網(wǎng)盤:https://pan.baidu.com/s/1T_eF5NDYeq38bR0cqjiZkw 提取碼:562z 阿里云盤:https://www.aliyundrive.com/s/giDvR2ShJR9 1.3 下載SDK 官網(wǎng)下載:http://www.gd32mcu.com/data/documents/yingyongruanjian/GD32F30x_Firmware_Library_V2.1.3.rar 百度網(wǎng)盤:https://pan.baidu.c
[單片機]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved