藍橋杯物聯網競賽_STM32L071_8_ADC擴展模塊

原理圖:

擴展模塊原理圖:

在這里插入圖片描述
在這里插入圖片描述
RP1和RP2分別對應著AIN1和AIN2,扭動它們,其對應滑動變阻器阻值也會變化

實驗板接口原理圖:

在這里插入圖片描述
在這里插入圖片描述
對應實驗板接口PB1和PB0

即AN1對應PB1, AN2對應PB0

CubMx配置:

在這里插入圖片描述
在這里插入圖片描述
ADC通道IN8和IN9才對應PB0和PB1

keil配置:

Function:

#include "Function.h"
#include "i2c.h"
#include "oled.h"
#include <stdint.h>
#include "adc.h"void OLED_Write(unsigned char type, unsigned char data){unsigned char Write_Data[2];Write_Data[0] = type;Write_Data[1] = data;HAL_I2C_Master_Transmit(&hi2c3, 0x78, Write_Data, 2, 0xff);
}void Function_OledEnable(unsigned char ms){HAL_GPIO_WritePin(OLED_POWER_GPIO_Port, OLED_POWER_Pin, GPIO_PIN_RESET);HAL_Delay(ms);OLED_Init();
}float* Function_GetAdc(unsigned char ms){uint16_t adc_data[2]; // 獲取原始值static float adc_Value[3]; // 轉化成浮點值for(unsigned char i = 0; i < 2; i ++){HAL_ADC_Start(&hadc); // 開啟HAL_ADC_PollForConversion(&hadc, 0xff); // 等待ADC轉換完成adc_data[i] = HAL_ADC_GetValue(&hadc);adc_Value[i] = ((float)adc_data[i]) * 3.30f/4095;HAL_Delay(ms); // 提高精度}HAL_ADC_Stop(&hadc); // 停止轉換adc_Value[2] = adc_Value[1];adc_Value[1] = adc_Value[0];adc_Value[0] = adc_Value[2]; // 將0, 1的值調換一下return adc_Value;
}
#ifndef __FUNCTION__
#define __FUNCTION__void OLED_Write(unsigned char type, unsigned char data);
void Function_OledEnable(unsigned char ms);
float* Function_GetAdc(unsigned char ms);
#endif

main:

#include "main.h"
#include "adc.h"
#include "i2c.h"
#include "gpio.h"
#include "Function.h"
#include "oled.h"void SystemClock_Config(void);int main(void)
{float * AdcGet;HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_ADC_Init();MX_I2C3_Init();Function_OledEnable(50);while (1){AdcGet = Function_GetAdc(10); // 獲取ADCOLED_ShowNumber(0, 0, (uint32_t) (AdcGet[0] + 0.5), 2, 16);OLED_ShowNumber(0, 2, (uint32_t) (AdcGet[1] + 0.5), 2, 16);}}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_I2C3;PeriphClkInit.I2c3ClockSelection = RCC_I2C3CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}void Error_Handler(void)
{__disable_irq();while (1){}}

效果:

在這里插入圖片描述

拓展:

Discontinuous Conversion Mode"是指在模數轉換器(ADC)中的一種工作模式。在這種模式下,ADC只有在觸發條件滿足時才會進行轉換,而不是連續地進行轉換。

在"Discontinuous Conversion Mode"中,ADC會在每個觸發事件(比如定時器溢出、外部觸發等)發生時進行一次轉換。這種模式適用于需要節省能量或者只在特定事件發生時才需要轉換的應用場景。在這種模式下,ADC會在完成轉換后自動進入低功耗模式,直到下一個觸發事件發生。

這種模式的工作原理在不同的微控制器或者ADC芯片上可能會有所不同,因此具體的工作方式需要參考相應的數據手冊或者技術文檔。

3.3f表示數據為float類型單精度,3.3默認數據為double類型雙精度

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211330.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#.net使用npgsql批量寫入數據入庫到postgresql數據庫

C#.net使用npgsql批量寫入數據入庫到postgresql數據庫 npgsql批量存儲數據1. 單條存儲2. 批量存儲 npgsql批量存儲數據 轉載自&#xff1a;https://blog.csdn.net/liuwanying0226/article/details/130825503 1. 單條存儲 當有類型限定時&#xff0c;例如jsonb&#xff0c;在…

uniApp項目的創建,運行到小程序

一、項目創建 1. 打開 HBuilder X 2. 右擊側邊欄點擊新建&#xff0c;選擇項目 3. 填寫項目名&#xff0c;點擊創建即可 注&#xff1a;uniapp中如果使用生命周期鉤子函數&#xff0c;建議使用哪種 ?(建議使用Vue的) 二、運行 1. 運行前先登錄 2. 登錄后點擊 manifest.js…

基于lambda簡化設計模式

前言 雖說使用設計模式可以讓復雜的業務代碼變得清晰且易于維護&#xff0c;但是某些情況下&#xff0c;開發可能會遇到我為了簡單的業務邏輯去適配設計模式的情況&#xff0c;本文筆者就以四種常見的設計模式為例&#xff0c;演示如何基于lambda來簡化設計模式的實現。 策略…

WorkPlus高效助力企業溝通的專業級即時通訊軟件

在當今高度信息化和全球化競爭的世界&#xff0c;企業需要一個高效便捷的溝通工具來促進團隊協作、提高工作效率。在這樣的背景下&#xff0c;WorkPlus作為一款專業級的即時通訊軟件應運而生。讓我們一起深入了解WorkPlus&#xff0c;探討其在企業溝通中的領先優勢和卓越能力。…

平衡二叉樹

AVL簡稱平衡二叉樹&#xff0c;縮寫為BBST&#xff0c;由蘇聯數學家 Adelse-Velskil 和 Landis 在 1962 年提出。 二叉樹是動態查找的典范&#xff0c;但在極限情況下&#xff0c;二叉樹的查找效果等同于鏈表&#xff0c;而平衡二叉樹可以完美的達到 log ? 2 n \log_2 n log2…

ElementPlus table 中嵌套 input 輸入框

文章目錄 需求分析 需求 vue3 項目中 使用UI組件庫 ElementPlus 時&#xff0c;table 中嵌入 input輸入框 分析 <template><div class"p-10"><el-table :data"tableData" border><el-table-column prop"date" label&qu…

課堂練習4.1:段式內存管理

4-1 課堂練習4.1&#xff1a;段式內存管理 段式內存管理以段為單位分配內存空間&#xff0c;段內連續&#xff0c;段間可以不連續。段可以很大&#xff0c;比如數據段、代碼段、棧段等。本實訓分析 Linux 0.11 的段式內存管理技術。 第1關1 號進程 mynext 變量的邏輯地址與線性…

cache教程 3.HTTP服務器

上一節我們實現了單機版的緩存服務&#xff0c;但是我們的目標是分布式緩存。那么&#xff0c;我們就需要把緩存服務部署到多態機器節點上&#xff0c;對外提供訪問接口。客戶端就可以通過這些接口去實現緩存的增刪改查。 分布式緩存需要實現節點間通信&#xff0c;而通信方法…

【面試經典150 | 二叉樹】翻轉二叉樹

文章目錄 寫在前面Tag題目來源題目解讀解題思路方法一&#xff1a;遞歸方法二&#xff1a;迭代 寫在最后 寫在前面 本專欄專注于分析與講解【面試經典150】算法&#xff0c;兩到三天更新一篇文章&#xff0c;歡迎催更…… 專欄內容以分析題目為主&#xff0c;并附帶一些對于本題…

4-SpringMVC

文章目錄 項目源碼地址回顧-MVC什么是MVC&#xff1f;MVC各部分組成 回顧-ServletMaven創建Web項目1、創建Maven父工程pom&#xff0c;并導入依賴2、用Maven新建一個Web Module3、代碼&#xff1a;HelloServlet.java3、代碼-hello.jsp3、代碼-web.xml4、配置Tomcat5、瀏覽器測試…

github使用方法【附安裝包】

如果你是一枚Coder&#xff0c;但是你不知道Github&#xff0c;那么我覺的你就不是一個菜鳥級別的Coder&#xff0c;因為你壓根不是真正Coder&#xff0c;你只是一個Code搬運工。說明你根本不善于突破自己&#xff01;為什么這么說原因很簡單&#xff0c;很多優秀的代碼以及各種…

高級系統架構設計師之路

前言&#xff1a;系 統 架 構 設 計 師 (System Architecture Designer)是項目開發活動中的眾多角色之 一 &#xff0c;它可 以是 一個人或 一個小組&#xff0c;也可以是一個團隊。架構師 (Architect) 包含建筑師、設計師、創造 者、締造者等含義&#xff0c;可以說&#xff0…

邊緣計算系統設計與實踐:引領科技創新的新浪潮

文章目錄 一、邊緣計算的概念二、邊緣計算的設計原則三、邊緣計算的關鍵技術四、邊緣計算的實踐應用《邊緣計算系統設計與實踐》特色內容簡介作者簡介目錄前言/序言本書讀者對象獲取方式 隨著物聯網、大數據和人工智能等技術的快速發展&#xff0c;傳統的中心化計算模式已經無法…

基于ssm人力資源管理系統論文

摘 要 隨著企業員工人數的不斷增多&#xff0c;企業在人力資源管理方面負擔越來越重&#xff0c;因此&#xff0c;為提高企業人力資源管理效率&#xff0c;特開發了本人力資源管理系統。 本文重點闡述了人力資源管理系統的開發過程&#xff0c;以實際運用為開發背景&#xff0…

【大數據】Hudi 核心知識點詳解(一)

Hudi 核心知識點詳解&#xff08;一&#xff09; 1.數據湖與數據倉庫的區別 &#xff1f;1.1 數據倉庫1.2 數據湖1.3 兩者的區別 2.Hudi 基礎功能2.1 Hudi 簡介2.2 Hudi 功能2.3 Hudi 的特性2.4 Hudi 的架構2.5 湖倉一體架構 3.Hudi 數據管理3.1 Hudi 表數據結構3.1.1 .hoodie …

【C語言】位運算實現二進制數據處理及BCD碼轉換

文章目錄 1&#xff0e;編程實驗&#xff1a;按short和unsigned short類型分別對-12345進行左移2位和右移2位操作&#xff0c;并輸出結果。2&#xff0e;編程實驗&#xff1a;利用位運算實現BCD碼與十進制數之間的轉換&#xff0c;假設數據類型為unsigned char。3&#xff0e;編…

FPGA | Verilog基礎語法

這里寫自定義目錄標題 Case語句系統任務$dumpfile | 為所要創建的VCD文件指定文件名。$dumpvar | 指定需要記錄到VCD文件中的信號$fscanf$fread菜鳥教程連接 Case語句 case(case_expr)condition1 : true_statement1 ;condition2 : true_stat…

多線程(進階二:CAS)

目錄 一、CAS的簡單介紹 CAS邏輯&#xff08;用偽代碼來描述&#xff09; 二、CAS在多線程中簡單的使用 三、原子類自增的代碼分析 都看到這了&#xff0c;點個贊再走吧&#xff0c;謝謝謝謝謝 一、CAS的簡單介紹 CAS的全稱&#xff1a;“Compare And Swap”&#xff0c;字…

C語言——字符函數和字符串函數(一)

&#x1f4dd;前言&#xff1a; 這篇文章對我最近學習的有關字符串的函數做一個總結和整理&#xff0c;主要講解字符函數和字符串函數&#xff08;strlen&#xff0c;strcpy和strncpy&#xff0c;strcat和strncat&#xff09;的使用方法&#xff0c;使用場景和一些注意事項&…

python常見庫的匯總

python常見庫 一、爬蟲二、界面開發三、圖片處理四、視頻處理、視頻剪輯五、音頻處理六、數據處理七、數據庫八、網頁開發九、神經學習、AI開發十、打包十一、Excel處理十二、微信十三、控制鼠標鍵盤十四、手柄十五、控制外設十六、郵箱十七、短信 一、爬蟲 Requests&#xff…