精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

嵌入式單片機MCU開發 ? 來源:嵌入式單片機MCU開發 ? 作者:嵌入式單片機MCU開 ? 2022-11-30 09:48 ? 次閱讀

概述

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

在這里插入圖片描述

樣品申請

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

硬件準備

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

在這里插入圖片描述

keil配置

microlib 進行了高度優化以使代碼變得很小。 它的功能比缺省 C 庫少,并且根本不具備某些 ISO C 特性。 某些庫函數的運行速度也比較慢,如果要使用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);          // 幀數據字長
        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);//使能發送器
    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);
        // 單通道用連續轉換模式
//        adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); 


        // 結果轉換右對齊
        adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
        // 轉換通道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);


        // 不用外部觸發轉換,軟件開啟即可
        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);
        // 單通道用連續轉換模式
//        adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE); 


        // 結果轉換右對齊
        adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
        // 轉換通道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);


        // 不用外部觸發轉換,軟件開啟即可
        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數據采集

uint16_t  get_adc(uint32_t adc_periph , uint8_t adc_channel)
{
/* 配置規則通道采集*/
    adc_regular_channel_config(adc_periph, 0, adc_channel, ADC_SAMPLETIME_55POINT5);
        // 由于沒有采用外部觸發,所以使用軟件觸發ADC轉換
        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);                             // 清除結束標志

        return  adc_regular_data_read(adc_periph);                         // 讀取ADC數據
}

數據采集

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);                    
    }

測試結果

輸入固定電壓進行測試。

在這里插入圖片描述

測試結果如下。

在這里插入圖片描述
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • adc
    adc
    +關注

    關注

    98

    文章

    6452

    瀏覽量

    544147
  • 固件庫
    +關注

    關注

    2

    文章

    97

    瀏覽量

    14926
  • gd32f303
    +關注

    關注

    4

    文章

    38

    瀏覽量

    3675
收藏 人收藏

    評論

    相關推薦

    GD32F303固件開發(14)----IIC之配置OLED

    本章配置GD32F303使用IIC進行驅動SSD1306的12864OLED。
    的頭像 發表于 07-26 08:55 ?3578次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(14)----IIC之配置OLED

    GD32F303】星空派介紹

    GD32官方資料的基礎上,提供GD32F303的庫函數開發資料、例程講解、視頻課程等。同時還提供RT-Thread相關的驅動開發、應用開發
    發表于 09-11 17:55

    GD32F30x系列固件

    GD32F30x系列固件包含GD32F303GD32F305、GD32F307三個系列的最新
    發表于 08-21 09:00 ?166次下載

    GD32F303固件開發(1)----前期準備與燒錄

    在這使用STM32CUBEMX進行配置STM32F103,移植到兆易創新GD32F303,然后進行測試。需要樣片的可以加Qun申請:615061293。
    的頭像 發表于 11-23 11:15 ?2620次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(1)----前期準備與燒錄

    GD32F303固件開發(3)----使用固件點亮LED

    概述 在GD的官網中有許多的DEMO文件,可以使用開發板的案例或者對應的MCU標準固件。需要樣片的可以加群申請:6_15061293。 下圖是GD
    的頭像 發表于 11-23 17:36 ?2838次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(3)----使用<b class='flag-5'>固件</b><b class='flag-5'>庫</b>點亮LED

    GD32F303固件開發(5)----GPIO輸出模式,速率測試、開漏和輸出說明

    以STM32CUBEMX創建STM32F103工程,同時移植在GD32F303中,同時通過GD32303C_START開發板內進行驗證。
    的頭像 發表于 11-25 15:32 ?3134次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(5)----GPIO輸出<b class='flag-5'>模式</b>,速率測試、開漏和輸出說明

    STM32CUBEMX開發GD32F30310)----ADC輪詢模式掃描多個通道

    。 本章主要配置,ADC輪詢模式掃描多個通道,通過
    的頭像 發表于 11-29 17:38 ?1802次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(<b class='flag-5'>10</b>)----<b class='flag-5'>雙</b><b class='flag-5'>ADC</b><b class='flag-5'>輪詢</b><b class='flag-5'>模式</b><b class='flag-5'>掃描</b><b class='flag-5'>多個</b><b class='flag-5'>通道</b>

    STM32CUBEIDE(9)----ADC輪詢模式掃描多個通道

    概述 本章STM32CUBEMX配置STM32F103ADC輪詢模式掃描
    的頭像 發表于 11-30 09:35 ?3744次閱讀
    STM32CUBEIDE(9)----<b class='flag-5'>雙</b><b class='flag-5'>ADC</b><b class='flag-5'>輪詢</b><b class='flag-5'>模式</b><b class='flag-5'>掃描</b><b class='flag-5'>多個</b><b class='flag-5'>通道</b>

    STM32CUBEMX開發GD32F303(11)----ADC在DMA模式掃描多個通道

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過GD32303C_START開發板內進行驗證。
    的頭像 發表于 11-30 10:59 ?2254次閱讀
    STM32CUBEMX<b class='flag-5'>開發</b><b class='flag-5'>GD32F303</b>(11)----<b class='flag-5'>ADC</b>在DMA<b class='flag-5'>模式</b>下<b class='flag-5'>掃描</b><b class='flag-5'>多個</b><b class='flag-5'>通道</b>

    GD32F303固件開發(11)----ADC在DMA模式掃描多個通道

    本章主要配置,ADC在DMA模式掃描多個通道,通過串口進行打印。 查閱手冊可以得知,PA9、PA10
    的頭像 發表于 11-30 11:38 ?3847次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(11)----<b class='flag-5'>ADC</b>在DMA<b class='flag-5'>模式</b>下<b class='flag-5'>掃描</b><b class='flag-5'>多個</b><b class='flag-5'>通道</b>

    GD32F303固件開發(12)----輸出PWM及修改PWM頻率與占空比

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發,同時通過開發板內進行驗證。 本章主要配置定時器輸出PWM,同時演示PWM頻率與占空比。 查閱手冊可以
    的頭像 發表于 11-30 15:36 ?9225次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(12)----輸出PWM及修改PWM頻率與占空比

    GD32F303固件開發(15)----外部中斷EXTI

    本章配置GD32F303使用EXTI進行驅動LED。
    的頭像 發表于 07-26 15:56 ?1441次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>(15)----外部中斷EXTI

    GD32F303固件開發

    的可以加群申請:615061293 。 GD32F303固件開發(1)----前期準備與燒錄 使用GDLINK、jlink、串口下載程序到GD
    的頭像 發表于 07-27 09:27 ?1113次閱讀
    <b class='flag-5'>GD32F303</b><b class='flag-5'>固件</b><b class='flag-5'>庫</b><b class='flag-5'>開發</b>

    GD32F303 低功耗模式要點

    我們都知道,MCU有低功耗模式,比如GD32F303芯片,就有Sleep、Deepsleep和Standby三種模式。關于這三種模式的具體使用方法,小伙伴們可以參考《
    的頭像 發表于 01-17 09:40 ?2434次閱讀
    <b class='flag-5'>GD32F303</b> 低功耗<b class='flag-5'>模式</b>要點

    GD32 MCU 移植教程】2、從 GD32F303 移植到 GD32F503

    GD32E503 系列是 GD 推出的 Cortex_M33 系列產品,該系列資源上與 GD32F303 兼容度非常高,本應用筆記旨在幫助您快速將應用程序從 GD32F303 系列微控
    的頭像 發表于 08-31 09:36 ?1367次閱讀
    【<b class='flag-5'>GD</b>32 MCU 移植教程】2、從 <b class='flag-5'>GD32F303</b> 移植到 <b class='flag-5'>GD32F</b>503