国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 基礎(chǔ)知識(探索者開發(fā)板)--135講 ADC轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了STM32 基礎(chǔ)知識(探索者開發(fā)板)--135講 ADC轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

ADC定義:

????????ADC即模擬數(shù)字轉(zhuǎn)換器,英文詳稱 Analog-to-digital converter,可以將外部的模擬信號轉(zhuǎn)換

hal_statustypedef hal_adcex_calibration_start(adc_handletypedef *hadc, uint3,stm32,嵌入式硬件,單片機(jī)

ADC采樣電壓范圍0~3.3v 對應(yīng)的數(shù)據(jù)是 0~4096 所以對ADC進(jìn)行數(shù)值轉(zhuǎn)電壓可以通過公式

電壓 = value*3.3/4096

ADC數(shù)模轉(zhuǎn)換中一些常用函數(shù):

1. HAL_ADC_Init 函數(shù)
HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef *hadc); 初始化ADC
形參:ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量?? ??? ?返回值:HAL_StatusTypeDef枚舉類型
typedef struct
{
?ADC_TypeDef *Instance; /* ADC 寄存器基地址 */
?ADC_InitTypeDef Init; /* ADC 參數(shù)初始化結(jié)構(gòu)體變量 */
?__IO uint32_t NbrOfCurrentConversionRank;/* 當(dāng)前轉(zhuǎn)換等級的 ADC 數(shù) */
?DMA_HandleTypeDef *DMA_Handle; /* DMA 配置結(jié)構(gòu)體 */
?HAL_LockTypeDef Lock; /* ADC 鎖定對象 */
?__IO uint32_t State; /* ADC 工作狀態(tài) */
?__IO uint32_t ErrorCode; /* ADC 錯誤代碼 */
}ADC_HandleTypeDef;
其中第二個成員變量Init需要重點(diǎn)配置
typedef struct {
uint32_t ClockPrescaler; ?? ??? ??? ?/* 設(shè)置預(yù)分頻系數(shù),即 PRESC[3:0]位,可選(2,4,6,8) */
uint32_t Resolution; ?? ??? ??? ??? ?/* 配置 ADC 的分辨率,可選(12位,10,8,6)分辨率高,精度高,時間長 */
uint32_t ScanConvMode; ?? ??? ??? ??? ?/* 掃描模式 可選(ADC_SCAN_DISABLE單通道,ADC_SCAN_ENABLE多)*/
uint32_t EOCSelection; ?? ??? ??? ??? ?/* 轉(zhuǎn)換完成標(biāo)志位() */
FunctionalState ContinuousConvMode; /* 開啟連續(xù)轉(zhuǎn)換模式否則就是單次轉(zhuǎn)換模式 */
uint32_t NbrOfConversion; ?? ??? ??? ?/* 設(shè)置轉(zhuǎn)換通道數(shù)目 */
FunctionalState DiscontinuousConvMode; /* 單次轉(zhuǎn)換模式選擇 */
uint32_t NbrOfDiscConversion; ?? ??? ?/* 單次轉(zhuǎn)換通道的數(shù)目 */
uint32_t ExternalTrigConv; ?? ??? ??? ?/* ADC 外部觸發(fā)源選擇 */
uint32_t ExternalTrigConvEdge; ?? ??? ?/* ADC 外部觸發(fā)極性*/
FunctionalState DMAContinuousRequests; /* DMA 轉(zhuǎn)換請求模式*/
} ADC_InitTypeDef;
1) ClockPrescaler:ADC 預(yù)分頻系數(shù)選擇,可選的分頻系數(shù)為 2、4、6、8。由于 ADC 最大時鐘
不得超過 36Mhz,我們這里配置 4 分頻,即 ADC 的時鐘頻率為:84 / 4 = 21Mhz。
2) Resolution:配置 ADC 的分辨率,可選的分辨率有 12 位、10 位、8 位和 6 位。分辨率越高,
轉(zhuǎn)換數(shù)據(jù)精度越高,轉(zhuǎn)換時間也越長;反之分辨率越低,轉(zhuǎn)換數(shù)據(jù)精度越低,轉(zhuǎn)換時間也越
短。
3) ScanConvMode:配置是否使用掃描。如果是單通道轉(zhuǎn)換使用 ADC_SCAN_DISABLE,如果
是多通道轉(zhuǎn)換使用 ADC_SCAN_ENABLE。
4) EOCSelection:可選參數(shù)為 ADC_EOC_SINGLE_CONV 和 ADC_EOC_SEQ_CONV,指定轉(zhuǎn)
換結(jié)束時是否產(chǎn)生 EOS 中斷或事件標(biāo)志。
5) ContinuousConvMode:可選參數(shù)為 ENABLE 和 DISABLE,配置自動連續(xù)轉(zhuǎn)換還是單次轉(zhuǎn)換。
使用 ENABLE 配置為使能自動連續(xù)轉(zhuǎn)換;使用 DISABLE 配置為單次轉(zhuǎn)換,轉(zhuǎn)換一次后停止
需要手動控制才重新啟動轉(zhuǎn)換。
6) NbrOfConversion:設(shè)置常規(guī)轉(zhuǎn)換通道數(shù)目,范圍是:1~16。
7) DiscontinuousConvMode:配置是否使用不連續(xù)的采樣模式,比如要轉(zhuǎn)換的通道有 1、2、5、
7、8、9,那么第一次觸發(fā)會進(jìn)行通道 1 與通道 2,下次觸發(fā)就是轉(zhuǎn)換通道 5 與通道 7,這
樣不連續(xù)的轉(zhuǎn)換,依次類推。此參數(shù)只有將 ScanConvMode 使能,還有 ContinuousConvMode
失能的情況下才有效,不可同時使能。
8) NbrOfDiscConversion:不連續(xù)采樣通道數(shù)。
9) ExternalTrigConv:外部觸發(fā)方式的選擇,如果使用軟件觸發(fā),那么外部觸發(fā)會關(guān)閉。
10) ExternalTrigConvEdge:外部觸發(fā)極性選擇,如果使用外部觸發(fā),可以選擇觸發(fā)的極性,可
選有禁止觸發(fā)檢測、上升沿觸發(fā)檢測、下降沿觸發(fā)檢測以及上升沿和下降沿均可觸發(fā)檢測。
11) DMAContinuousRequests:指定 DMA 請求是否以一次性模式執(zhí)行(當(dāng)達(dá)到轉(zhuǎn)換次數(shù)時,DMA
傳輸停止)或在連續(xù)模式下(DMA 傳輸無限制,無論轉(zhuǎn)換的數(shù)量)。注:在連續(xù)模式下,DMA 必
須配置為循環(huán)模式。否則,當(dāng)達(dá)到 DMA 緩沖區(qū)最大指針時將觸發(fā)溢出。注意:當(dāng)常規(guī)組和注
入組都沒有轉(zhuǎn)換時(禁用 ADC,或啟用 ADC,沒有連續(xù)模式或可以啟動轉(zhuǎn)換的外部觸發(fā)器),
必須修改此參數(shù)。該參數(shù)可設(shè)置為“啟用”或“禁用”。


2.HAL_ADCEx_Calibration_Start函數(shù)
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc);ADC自校準(zhǔn)功能
形參:ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量?? ??? ??? ?返回值:HAL_StatusTypeDef枚舉類型的值


3. HAL_ADC_ConfigChannel函數(shù)
HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef *hadc, ADC_ChannelConfTypeDef *sConfig);ADC自校準(zhǔn)功能
形參:參數(shù)1ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量 參數(shù)2ADC_ChannelConfTypeDef 結(jié)構(gòu)體類型指針變量
typedef struct {
?uint32_t Channel; /* ADC 轉(zhuǎn)換通道(0~19)*/
?uint32_t Rank; /* ADC 轉(zhuǎn)換順序(1~16) */
?uint32_t SamplingTime; /* ADC 采樣周期(480個ADC時鐘周期) */
?uint32_t Offset; /* ADC 偏移量 */
} ADC_ChannelConfTypeDef;


4.HAL_ADC_Start 函數(shù)
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef *hadc);ADC啟動函數(shù)
形參:ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量?? ??? ?返回值:HAL_StatusTypeDef枚舉類型的值


5. HAL_ADC_PollForConversion函數(shù)?? ??? ??? ??? ?等待規(guī)則組轉(zhuǎn)換完成函數(shù)
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef *hadc,uint32_t Timeout);
形參:參數(shù)1ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量 參數(shù)2等待轉(zhuǎn)換的等待時間ms
返回值:HAL_StatusTypeDef 枚舉類型的值。


6. HAL_ADC_GetValue 函數(shù)
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef *hadc);?? ??? ?獲取ADC轉(zhuǎn)換值
形參:ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量 ? ?返回值:當(dāng)前的轉(zhuǎn)換值,uint32_t 類型數(shù)據(jù)


7.HAL_DMA_Start 函數(shù) ? ? ? ??? ??? ?啟動DMA傳輸(在任何能使用DMA傳輸?shù)膱鼍?
HAL_Status TypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma,
uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
參數(shù):(DMA_HandleTypeDef 結(jié)構(gòu)體類型指針變量,DMA 傳輸?shù)脑吹刂?DMA 傳輸?shù)哪康牡刂?要傳輸?shù)臄?shù)據(jù)項(xiàng)數(shù)目)


8. HAL_ADC_Start_DMA 函數(shù) ?? ??? ?只啟動有ADC(DMA傳輸)方式
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc,
uint32_t *pData, uint32_t Length);
形參:(ADC_HandleTypeDef 結(jié)構(gòu)體類型指針變量, ADC 采樣數(shù)據(jù)傳輸?shù)哪康牡刂?要傳輸?shù)臄?shù)據(jù)項(xiàng)數(shù)目)


9.HAL_DMA_Init 函數(shù) ?? ??? ?初始化DMA
HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);
參數(shù):DMA_HandleTypeDef 結(jié)構(gòu)體類型指針變量
typedef struct __DMA_HandleTypeDef
{
?void *Instance; /* 寄存器基地址 */
?DMA_InitTypeDef Init; /* DAM 通信參數(shù) */
?HAL_LockTypeDef Lock; /* DMA 鎖對象 */
?__IO HAL_DMA_StateTypeDef State; /* DMA 傳輸狀態(tài) */
?void *Parent; /* 父對象狀態(tài),HAL 庫處理的中間變量 */
void (*XferCpltCallback)( struct __DMA_HandleTypeDef *hdma);/*DMA 傳輸完成回調(diào)*/
/* DMA 一半傳輸完成回調(diào) */
void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma);
?/* DMA 傳輸完整的 Memory1 回調(diào) */
void (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma);
/* DMA 傳輸半完全內(nèi)存回調(diào) */
void (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma);
/*DMA 傳輸錯誤回調(diào)*/
void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma);
/* DMA 傳輸中止回調(diào) */
?void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma);
?__IO uint32_t ErrorCode; /* DMA 存取錯誤代碼 */
?uint32_t StreamBaseAddress; /* DMA 通道基地址 */
uint32_t StreamIndex; /* DMA 通道索引 */
}DMA_HandleTypeDef;
重點(diǎn)介紹第二個成員變量Init
typedef struct
{
?uint32_t Channel; /* 傳輸通道,例如:DMA_CHANEL_4 */?
?uint32_t Direction; /* 傳輸方向,例如存儲器到外設(shè) DMA_MEMORY_TO_PERIPH */
?uint32_t PeriphInc; /* 外設(shè)(非)增量模式,非增量模式 DMA_PINC_DISABLE */?
?uint32_t MemInc; /* 存儲器(非)增量模式,增量模式 DMA_MINC_ENABLE */?
?uint32_t PeriphDataAlignment; /* 外設(shè)數(shù)據(jù)大?。?/16/32 位 */
?uint32_t MemDataAlignment; /* 存儲器數(shù)據(jù)大小:8/16/32 位 */
?uint32_t Mode; /* 模式:外設(shè)流控模式/循環(huán)模式/普通模式 */?
?uint32_t Priority; /* DMA 優(yōu)先級:低/中/高/非常高 */
?uint32_t FIFOMode; /* FIFO 模式開啟或者禁止 */
?uint32_t FIFOThreshold; /* FIFO 閾值選擇 */
?uint32_t MemBurst; /* 存儲器突發(fā)模式:單次/4 個節(jié)拍/8 個節(jié)拍/16 個節(jié)拍 */?
?uint32_t PeriphBurst; /* 外設(shè)突發(fā)模式:單次/4 個節(jié)拍/8 個節(jié)拍/16 個節(jié)拍 */?
}DMA_InitTypeDef

單通道ADC采集配置步驟

a.開啟ADCx和GPIO時鐘

b.初始化ADCx,配置器工作參數(shù)和硬件Msp的IO

c.配置ADC通道并啟動AD轉(zhuǎn)換

d.讀取ADC值

單/多通道ADC采集(DMA讀取)配置

a.開啟ADCx和GPIO時鐘

b.初始化ADC,配置其工作參數(shù)和硬件Msp

c.配置ADC通道并啟動AD轉(zhuǎn)換

d.初始化DMA

e.使能DMA對應(yīng)數(shù)據(jù)流中斷,配置DMA中斷優(yōu)先級

f.編寫中斷服務(wù)函數(shù)

單通道ADC采集實(shí)驗(yàn)代碼

//adc.c

#include "./BSP/ADC/adc.h"
#include "./SYSTEM/delay/delay.h"


ADC_HandleTypeDef g_adc_handle;   /* ADC句柄 */

/**
 * @brief       ADC初始化函數(shù)
 *   @note      本函數(shù)支持ADC1/ADC2任意通道, 但是不支持ADC3
 *              我們使用12位精度, ADC采樣時鐘=21M, 轉(zhuǎn)換時間為: 采樣周期 + 12個ADC周期
 *              設(shè)置最大采樣周期: 480, 則轉(zhuǎn)換時間 = 492 個ADC周期 = 23.42us
 * @param       無
 * @retval      無
 */
void adc_init(void)
{
    g_adc_handle.Instance = ADC_ADCX;
    g_adc_handle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;        /* 4分頻,ADCCLK = PCLK2/4 = 84/4 = 21Mhz */
    g_adc_handle.Init.Resolution = ADC_RESOLUTION_12B;                      /* 12位模式 */
    g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;                      /* 右對齊 */
    g_adc_handle.Init.ScanConvMode = DISABLE;                               /* 非掃描模式 */
    g_adc_handle.Init.ContinuousConvMode = DISABLE;                         /* 關(guān)閉連續(xù)轉(zhuǎn)換 */
    g_adc_handle.Init.NbrOfConversion = 1;                                  /* 1個轉(zhuǎn)換在規(guī)則序列中 也就是只轉(zhuǎn)換規(guī)則序列1 */
    g_adc_handle.Init.DiscontinuousConvMode = DISABLE;                      /* 禁止不連續(xù)采樣模式 */
    g_adc_handle.Init.NbrOfDiscConversion = 0;                              /* 不連續(xù)采樣通道數(shù)為0 */
    g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;                /* 軟件觸發(fā) */
    g_adc_handle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; /* 使用軟件觸發(fā) */
    g_adc_handle.Init.DMAContinuousRequests = DISABLE;                      /* 關(guān)閉DMA請求 */
    HAL_ADC_Init(&g_adc_handle);                                            /* 初始化 */
}

/**
 * @brief       ADC底層驅(qū)動,引腳配置,時鐘使能
                此函數(shù)會被HAL_ADC_Init()調(diào)用
 * @param       hadc:ADC句柄
 * @retval      無
 */
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc)
{
    if(hadc->Instance == ADC_ADCX)
    {
        GPIO_InitTypeDef gpio_init_struct;
        ADC_ADCX_CHY_CLK_ENABLE();      /* 使能ADCx時鐘 */
        ADC_ADCX_CHY_GPIO_CLK_ENABLE(); /* 開啟GPIO時鐘 */

        /* AD采集引腳模式設(shè)置,模擬輸入 */
        gpio_init_struct.Pin = ADC_ADCX_CHY_GPIO_PIN;
        gpio_init_struct.Mode = GPIO_MODE_ANALOG;   //模擬輸入模式
        gpio_init_struct.Pull = GPIO_NOPULL;        //該模式用來配置gpio的外部上下拉電阻
        HAL_GPIO_Init(ADC_ADCX_CHY_GPIO_PORT, &gpio_init_struct);
    }
}

/**
 * @brief       設(shè)置ADC通道采樣時間
 * @param       adcx : adc句柄指針,ADC_HandleTypeDef
 * @param       ch   : 通道號, ADC_CHANNEL_0~ADC_CHANNEL_17
 * @param       stime: 采樣時間  0~7, 對應(yīng)關(guān)系為:
 *   @arg       ADC_SAMPLETIME_3CYCLES,  3個ADC時鐘周期        ADC_SAMPLETIME_15CYCLES, 15個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_28CYCLES, 28個ADC時鐘周期       ADC_SAMPLETIME_56CYCLES, 56個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_84CYCLES, 84個ADC時鐘周期       ADC_SAMPLETIME_112CYCLES,112個ADC時鐘周期
 *   @arg       ADC_SAMPLETIME_144CYCLES,144個ADC時鐘周期      ADC_SAMPLETIME_480CYCLES,480個ADC時鐘周期
 * @param       rank: 多通道采集時需要設(shè)置的采集編號,
                假設(shè)你定義channel1的rank=1,channel2的rank=2,
                那么對應(yīng)你在DMA緩存空間的變量數(shù)組AdcDMA[0] 就i是channel1的轉(zhuǎn)換結(jié)果,AdcDMA[1]就是通道2的轉(zhuǎn)換結(jié)果。 
                單通道DMA設(shè)置為 ADC_REGULAR_RANK_1
 *   @arg       編號1~16:ADC_REGULAR_RANK_1~ADC_REGULAR_RANK_16
 * @retval      無
 */
void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime)
{
    /* 配置對應(yīng)ADC通道 */
    ADC_ChannelConfTypeDef adc_channel;
    adc_channel.Channel = ch;               /* 設(shè)置ADCX對通道ch */
    adc_channel.Rank = rank;                /* 設(shè)置采樣序列 */
    adc_channel.SamplingTime = stime;       /* 設(shè)置采樣時間 */
    HAL_ADC_ConfigChannel( adc_handle, &adc_channel);   
}

/**
 * @brief       獲得ADC轉(zhuǎn)換后的結(jié)果
 * @param       ch: 通道值 0~17,取值范圍為:ADC_CHANNEL_0~ADC_CHANNEL_17
 * @retval      無
 */
uint32_t adc_get_result(uint32_t ch)
{
    adc_channel_set(&g_adc_handle, ch, 1, ADC_SAMPLETIME_480CYCLES);    /* 設(shè)置通道,序列和采樣時間 */
    HAL_ADC_Start(&g_adc_handle);                                       /* 開啟ADC */
    HAL_ADC_PollForConversion(&g_adc_handle, 10);                       /* 輪詢轉(zhuǎn)換 */

    return (uint16_t)HAL_ADC_GetValue(&g_adc_handle);                   /* 返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果 */
}

/**
 * @brief       獲取通道ch的轉(zhuǎn)換值,取times次, 然后平均
 * @param       ch      : 通道號, 0~17
 * @param       times   : 獲取次數(shù)
 * @retval      通道ch的times次轉(zhuǎn)換結(jié)果平均值
 */
uint32_t adc_get_result_average(uint32_t ch, uint8_t times)
{
    uint32_t temp_val = 0;
    uint8_t t;

    for (t = 0; t < times; t++)     /* 獲取times次數(shù)據(jù) */
    {
        temp_val += adc_get_result(ch);
        delay_ms(5);
    }

    return temp_val / times;        /* 返回平均值 */
}

//adc.h

#ifndef __ADC_H
#define __ADC_H

#include "./SYSTEM/sys/sys.h"


/******************************************************************************************/
/* ADC及引腳 定義 */

#define ADC_ADCX_CHY_GPIO_PORT              GPIOA
#define ADC_ADCX_CHY_GPIO_PIN               GPIO_PIN_5
#define ADC_ADCX_CHY_GPIO_CLK_ENABLE()      do{ __HAL_RCC_GPIOA_CLK_ENABLE(); }while(0)         /* PA口時鐘使能 */

#define ADC_ADCX                            ADC1 
#define ADC_ADCX_CHY                        ADC_CHANNEL_5                                       /* 通道Y,  0 <= Y <= 17 */ 
#define ADC_ADCX_CHY_CLK_ENABLE()           do{ __HAL_RCC_ADC1_CLK_ENABLE(); }while(0)          /* ADC1 時鐘使能 */

/******************************************************************************************/

void adc_init(void);                                            /* ADC初始化 */
void adc_channel_set(ADC_HandleTypeDef *adc_handle, uint32_t ch, uint32_t rank, uint32_t stime); /* ADC通道設(shè)置 */
uint32_t adc_get_result(uint32_t ch);                           /* 獲得某個通道值 */
uint32_t adc_get_result_average(uint32_t ch, uint8_t times);    /* 得到某個通道給定次數(shù)采樣的平均值 */

#endif

main.c文章來源地址http://www.zghlxwxcb.cn/news/detail-828228.html

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/ADC/adc.h"


int main(void)
{
    uint16_t adcx;
    float temp;

    HAL_Init();                             /* 初始化HAL庫 */
    sys_stm32_clock_init(336, 8, 2, 7);     /* 設(shè)置時鐘,168Mhz */
    delay_init(168);                        /* 延時初始化 */
    usart_init(115200);                     /* 串口初始化為115200 */
    led_init();                             /* 初始化LED */
    lcd_init();                             /* 初始化LCD */
    adc_init();                             /* 初始化ADC */

    lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
    lcd_show_string(30, 70, 200, 16, 16, "ADC TEST", RED);
    lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
    lcd_show_string(30, 110, 200, 16, 16, "ADC1_CH5_VAL:", BLUE);
    lcd_show_string(30, 130, 200, 16, 16, "ADC1_CH5_VOL:0.000V", BLUE); /* 先在固定位置顯示小數(shù)點(diǎn) */

    while (1)
    {
        adcx = adc_get_result_average(ADC_ADCX_CHY, 10);    /* 獲取通道5的轉(zhuǎn)換值,10次取平均 */
        lcd_show_xnum(134, 110, adcx, 5, 16, 0, BLUE);      /* 顯示ADC采樣后的原始值 */
 
        temp = (float)adcx * (3.3 / 4096);                  /* 獲取計算后的帶小數(shù)的實(shí)際電壓值,比如3.1111 */
        adcx = temp;                                        /* 賦值整數(shù)部分給adcx變量,因?yàn)閍dcx為u16整形 */
        lcd_show_xnum(134, 130, adcx, 1, 16, 0, BLUE);      /* 顯示電壓值的整數(shù)部分,3.1111的話,這里就是顯示3 */

        temp -= adcx;                                       /* 把已經(jīng)顯示的整數(shù)部分去掉,留下小數(shù)部分,比如3.1111-3=0.1111 */
        temp *= 1000;                                       /* 小數(shù)部分乘以1000,例如:0.1111就轉(zhuǎn)換為111.1,相當(dāng)于保留三位小數(shù)。 */
        lcd_show_xnum(150, 130, temp, 3, 16, 0X80, BLUE);   /* 顯示小數(shù)部分(前面轉(zhuǎn)換為了整形顯示),這里顯示的就是111. */

        LED0_TOGGLE();
        delay_ms(100);
    }
}

到了這里,關(guān)于STM32 基礎(chǔ)知識(探索者開發(fā)板)--135講 ADC轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • stm32f407探索者開發(fā)板(二十二)——通用定時器基本原理講解

    stm32f407探索者開發(fā)板(二十二)——通用定時器基本原理講解

    STM32F40x系列總共最多有14個定時器 三種(4)STM32定時器區(qū)別 STM3 F4 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定時器功能特點(diǎn)包括: 16 /32 位向上、向下、向上/向下(中心對齊)計數(shù)模式,自動裝載計數(shù)器(TIMx_CNT)。 16 位可編程(可以實(shí)時修改)預(yù)分頻器(TIMx_PSC),計數(shù)器時鐘頻率的分頻系

    2024年02月12日
    瀏覽(26)
  • STM32F407ZGT6正點(diǎn)原子F4探索者開發(fā)板 -- 跑馬燈例程

    STM32F407ZGT6正點(diǎn)原子F4探索者開發(fā)板 -- 跑馬燈例程

    LED0 - PF9 LED1 - PF10 PF9 = 0, LED0 亮,PF9 = 1,LED0 滅 PF10 = 0, LED1 亮,PF10 = 1,LED1 滅

    2024年02月15日
    瀏覽(33)
  • STM32 F407探索者移植正點(diǎn)原子LCD例程(CubeMx)

    STM32 F407探索者移植正點(diǎn)原子LCD例程(CubeMx)

    先說明本次實(shí)驗(yàn)所使用的硬件型號,本次實(shí)驗(yàn)使用正點(diǎn)原子F407探索者V3.4版本,屏幕尺寸為4.3寸 TFTLCD。 本文章主要講解如何移植正點(diǎn)原子的官方LCD代碼,并不涉及太多理論知識。然后,官方的LCD代碼應(yīng)該是更新過了,因?yàn)橹耙惨浦策^一次其他板子的,好像也不是醬紫,所以

    2024年04月17日
    瀏覽(86)
  • 看野火的視頻,用正點(diǎn)原子的板子(STM32F4探索者)做ADC讀取電壓實(shí)驗(yàn)

    看野火的視頻,用正點(diǎn)原子的板子(STM32F4探索者)做ADC讀取電壓實(shí)驗(yàn)

    使用STM32F4的ADC1通道5(PA5)來采樣外部電壓值(這里采樣兩個電壓值TPAD(3.3v),GND(0v)),最后通過串口打印電壓值。 由上圖可以看到, ADC1 的通道 5是對應(yīng)著引腳PA5的。 板子右邊是GND,ADC,TPAD引腳,做實(shí)驗(yàn)時,把兩者相連即可讀電壓值。 ADC時鐘: 這里是用于模擬電路的時

    2024年02月09日
    瀏覽(22)
  • 阿里云天池 天池實(shí)驗(yàn)室DSW探索者版 免費(fèi)GPU 天池notebook教程

    阿里云天池 天池實(shí)驗(yàn)室DSW探索者版 免費(fèi)GPU 天池notebook教程

    1、DSW教程 點(diǎn)擊天池notebook,進(jìn)入我的實(shí)驗(yàn)室 選擇一個私有項(xiàng)目,點(diǎn)擊編輯 集成機(jī)器學(xué)習(xí) PAI DSW (DataScienceWorkshop)探索者版開發(fā)環(huán)境 左邊文件管理,中間工作區(qū),右邊是計算資源。 在文件資源管理區(qū)的頂部還有4個按鈕,從左到右分別對應(yīng)的是:打開DSW Launcher啟動器,新建文

    2024年02月01日
    瀏覽(31)
  • 應(yīng)屆生談薪技巧和注意事項(xiàng),怎么為自己多爭取1~2k(FPGA,芯片談薪,數(shù)字IC,嵌入式,模擬IC,F(xiàn)PGA探索者)

    應(yīng)屆生談薪技巧和注意事項(xiàng),怎么為自己多爭取1~2k(FPGA,芯片談薪,數(shù)字IC,嵌入式,模擬IC,F(xiàn)PGA探索者)

    ? 找工作的終極目標(biāo):談薪!談高薪!今天【FPGA探索者】給大家分享一下談薪的技巧和注意事項(xiàng),別被HR輕易壓價。 ??本文適用人群: 應(yīng)屆畢業(yè)生 。 FPGA探索者 FPGA+數(shù)字IC筆試面試,無線通信物理層及數(shù)字信號處理,半導(dǎo)體芯片行業(yè)求職,校招社招實(shí)習(xí),職場趣事,行業(yè)動

    2024年01月25日
    瀏覽(28)
  • STM32-02-STM32基礎(chǔ)知識

    STM32-02-STM32基礎(chǔ)知識

    STM32F103 STM32F103是ST公司基于ARM授權(quán)Cortex M3內(nèi)核而設(shè)計的一款芯片,而 Cortex M內(nèi)核 使用的是 ARM v7-M架構(gòu) ,是為了替代老舊的單片機(jī)而量身定做的一個內(nèi)核,具有低成本、低功耗、實(shí)時性好、中斷響應(yīng)快、處理效率高等特點(diǎn)。 架構(gòu) 、 內(nèi)核 、 芯片 的關(guān)系: 架構(gòu) : (ARMv7-M)

    2024年02月03日
    瀏覽(21)
  • 【STM32】基礎(chǔ)知識 第二課 初識 STM32

    【STM32】基礎(chǔ)知識 第二課 初識 STM32

    ARM 公司: 只做內(nèi)核設(shè)計和 IP 授權(quán), 不參與芯片設(shè)計. 對比項(xiàng) Cortex-A (Application) Cortex-R (Real-time) Cortex-M (Microcontroller) 特點(diǎn) 高時鐘頻率, 長流水線, 高性能 較高時鐘頻率, 較長的流水線, 實(shí)時性強(qiáng) 時鐘頻率較低, 通常較短的流水線, 超低功耗 應(yīng)用場景 移動計算, 智能手機(jī), 平板電腦

    2024年02月02日
    瀏覽(43)
  • 【STM32】基礎(chǔ)知識 第五課 C 語言基礎(chǔ)知識

    【STM32】基礎(chǔ)知識 第五課 C 語言基礎(chǔ)知識

    stdint.h 是從 C99 中引進(jìn)的一個標(biāo)準(zhǔn) C 庫的文件. 路徑: “D:MDK5.34ARMARMCCinclude” 運(yùn)算符 含義 運(yùn)算符 含義 按位與 ~ 按位取反 | 按位或 左移 ^ 按位異或 右移 按位與: num1 運(yùn)算符 num2 結(jié)果 0 0 0 1 0 0 0 1 0 1 1 1 按位或: num1 運(yùn)算符 num2 結(jié)果 0 | 0 0 1 | 0 1 0 | 1 1 1 | 1 1 按位異或: num1 運(yùn)算符

    2024年02月13日
    瀏覽(52)
  • STM32 串口基礎(chǔ)知識學(xué)習(xí)

    STM32 串口基礎(chǔ)知識學(xué)習(xí)

    串行通信:數(shù)據(jù)逐位按順序依次傳輸。 并行通信:數(shù)據(jù)各位通過多條線同時傳輸。 對比 傳輸速率:串行通信較低,并行通信較高。 抗干擾能力:串行通信較強(qiáng),并行通信較弱。 通信距離:串行通信較長,并行通信較短。 IO資源占用:串行通信較少,并行通信較多。 成本:

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包