25/1/15 嵌入式筆記 初學STM32F108

GPIO初始化函數

GPIO_Ini:初始化GPIO引腳的模式,速度和引腳號

GPIO_Init(GPIOA, &GPIO_InitStruct);? // 初始化GPIOA的引腳0

GPIO輸出控制函數

GPIO_SetBits:將指定的GPIO引腳設置為高電平

GPIO_SetBits(GPIOA, GPIO_Pin_0); ?// 將GPIOA的引腳0設置為高電平

GPIO_ResetBits:將指定的GPIO引腳設置為低電平

GPIO_ResetBits(GPIOA, GPIO_Pin_0); ?// 將GPIOA的引腳0設置為低電平

GPIO_WriteBit:寫入指定的電平狀態到GPIO引腳

GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); ?// 將GPIOA的引腳0設置為高電平

GPIO_Write:寫入一個16位值到GPIO端口

GPIO_Write(GPIOA, 0x0001); ?// 將GPIOA的引腳0設置為高電平,其他引腳為低電平

GPIO輸入讀取函數

GPIO_ReadInputDataBit:讀取指定GPIO引腳的電平狀態

if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_SET) {
? ? // 引腳0為高電平
}

GPIO_ReadInputData:讀取整個GPIO端口的輸入狀態

uint16_t portValue = GPIO_ReadInputData(GPIOA); ?// 讀取GPIOA的輸入狀態

GPIO時鐘使能函數

RCC_APB2PeriphClockCmd:使能GPIO端口的時鐘。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); ?// 使能GPIOA的時鐘

時鐘使能是指為某個外設(如GPIO、USART、SPI等)提供時鐘信號,使其能夠正常工作。

GPIO復用功能配置

GPIO_PinAFConfig:配置GPIO引腳的復用功能

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1); ?// 配置GPIOA的引腳9為USART1功能

GPIO引腳的復用功能是指將GPIO引腳用于除普通輸入輸出之外的其他功能。STM32的GPIO引腳不僅可以作為普通的數字輸入或輸出,還可以配置為其他外設功能(如USART、SPI、I2C、定時器等)的引腳。

點亮LED

#include "stm32f10x.h"  // 包含STM32F10x系列的頭文件int main(void) {// 使能GPIOA的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 定義并初始化GPIO結構體GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼寫錯誤:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 選擇引腳0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 設置輸出速度為50MHz// 初始化GPIOA的引腳GPIO_Init(GPIOA, &GPIO_InitStructure);// 將GPIOA的引腳0設置為低電平GPIO_ResetBits(GPIOA, GPIO_Pin_0);  // 修正拼寫錯誤:GPIO_ResetLBits -> GPIO_ResetBits// 主循環while (1) {// 可以在這里添加其他邏輯}
}

LED閃爍

#include "stm32f10x.h"  // 包含STM32F10x系列的頭文件
#include "Delay.h"
int main(void) {// 使能GPIOA的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 定義并初始化GPIO結構體GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼寫錯誤:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  // 選擇引腳0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 設置輸出速度為50MHz// 初始化GPIOA的引腳GPIO_Init(GPIOA, &GPIO_InitStructure);// 主循環while (1) {GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);Delay_ms(500);}
}

流水燈

#include "stm32f10x.h"  // 包含STM32F10x系列的頭文件
#include "Delay.h"
int main(void) {// 使能GPIOA的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 定義并初始化GPIO結構體GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼寫錯誤:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2; // 選擇引腳0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 設置輸出速度為50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);// 主循環while (1) {GPIO_Write(GPIOA,~0x0001);Delay_ms(500);GPIO_Write(GPIOA,~0x0002);Delay_ms(500);GPIO_Write(GPIOA,~0x0004);Delay_ms(500);GPIO_Write(GPIOA,~0x0008);Delay_ms(500);GPIO_Write(GPIOA,~0x00010);Delay_ms(500);GPIO_Write(GPIOA,~0x00020);Delay_ms(500);GPIO_Write(GPIOA,~0x00040);Delay_ms(500);GPIO_Write(GPIOA,~0x00080);Delay_ms(500);}
}

蜂鳴器

#include "stm32f10x.h"  // 包含STM32F10x系列的頭文件
#include "Delay.h"
int main(void) {// 使能GPIOA的時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 定義并初始化GPIO結構體GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 修正拼寫錯誤:GPIO_Mode_OUT_PP -> GPIO_Mode_Out_PPGPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // 選擇引腳0GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // 設置輸出速度為50MHzGPIO_Init(GPIOA,&GPIO_InitStructure);// 主循環while (1) {GPIO_Write(GPIOB,GPIO_Pin_12);Delay_ms(500);GPIO_Write(GPIOB,GPIO_Pin_12);Delay_ms(500);}
}

GPIO使用步驟:初始化時鐘,然后定義結構體,賦值結構體

GPIO_Mode選擇輸入輸出模式

GPIO_Pin選擇引腳

GPIO_Speed選擇速度?

OLED:有機發光二極管

OLED驅動函數

STM32中斷系統

外部中斷

定時器

輸出比較功能

輸出比較(Output Compare,OC)?是定時器(Timer)的一種功能,用于生成精確的時間信號或控制外部設備(如PWM信號、脈沖生成等)。輸出比較功能通過比較定時器的計數器值(CNT)和捕獲/比較寄存器(CCR)的值,來觸發特定的事件(如翻轉輸出、產生中斷等)。

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"uint8_t i;			//定義在定時器中斷里自增的變量int main(void)
{/*模塊初始化*/OLED_Init();		//OLED初始化PWM_Init();		//定時中斷初始化while (1){for(i=0;i<=100;i++){PWM_SetComparel(i);Delay_ms(10);}for(i=0;i<=100;i++){PWM_SetComparel(100-i);Delay_ms(10);}
}

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

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

相關文章

mac m4 安裝 node

brew install node // 安裝 node //安裝的路徑在&#xff1a; /opt/homebrew/bin/node brew install node14 // brew install node22 // 安裝指定版本 如果需要設置環境變量&#xff1a;通過&#xff1a; which node 查找路徑 export PATH"/usr/local/opt/…

haproxy+nginx網站架構,實現負載均衡實驗筆記

前提準備&#xff1a; 兩臺nginx&#xff0c;一臺haproxynginx1&#xff1a;192.168.180.120nginx2&#xff1a;192.168.180.130&#xff0c;NFShaproxy&#xff1a;192.168.180.110 nginx&#xff08;兩臺nginx的操作是一樣的&#xff09;&#xff1a; 1. 安裝nginx #先安…

【C++篇】紅黑樹的實現

目錄 前言&#xff1a; 一&#xff0c;紅黑樹的概念 1.1&#xff0c;紅黑樹的規則 1.2&#xff0c;紅黑樹的最長路徑 1.3&#xff0c;紅黑樹的效率分析 二&#xff0c;紅黑樹的實現 2.1&#xff0c;紅黑樹的結構 2.2&#xff0c;紅黑樹的插入 2.2.1&#xff0c;大致過程…

如何在谷歌瀏覽器中設置自定義安全警告

隨著網絡環境的日益復雜&#xff0c;瀏覽器的安全問題也愈發引人關注。谷歌瀏覽器作為一款廣泛使用的瀏覽器&#xff0c;其自定義安全警告功能為用戶提供了更加個性化和安全的瀏覽體驗。本文將詳細介紹如何在谷歌瀏覽器中設置自定義安全警告&#xff0c;幫助用戶更好地保護自己…

Spring 6 第1章——概述

一.Spring是什么 Spring是一款主流的Java EE輕量級&#xff08;體積小、不需要依賴其它組件&#xff09;開源框架Spring的目的是用于簡化Java企業級應用的開發難度和開發周期Spring的用途不僅限于服務端的開發&#xff0c;從簡單性、可測試性和松耦合的角度而言&#xff0c;任…

C語言預處理藝術:編譯前的魔法之旅

大家好&#xff0c;這里是小編的博客頻道 小編的博客&#xff1a;就愛學編程 很高興在CSDN這個大家庭與大家相識&#xff0c;希望能在這里與大家共同進步&#xff0c;共同收獲更好的自己&#xff01;&#xff01;&#xff01; 本文目錄 引言正文一、預處理的作用與流程&#xf…

基于Springboot + vue實現的旅游網站

&#x1f942;(???)您的點贊&#x1f44d;?評論&#x1f4dd;?收藏?是作者創作的最大動力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;點贊&#x1f44d;收藏??留言&#x1f4dd;歡迎留言討論 &#x1f525;&#x1f525;&…

docker-compose和docker倉庫

一、docker-compose 1.概述 docker-compose是一個自動編排工具&#xff0c;可以根據dockerfile自動化部署docker容器。 主要功能 配置定義 使用YAML文件&#xff08;通常命名為docker - compose.yml&#xff09;來描述應用程序的服務、網絡和卷等配置。 容器編排 可以同時…

MAC AndroidStudio模擬器無網絡

先確認PC端是正常訪問網絡的&#xff1b; 模擬器端修改Wifi設置&#xff1a;設置 - 網絡和互聯網 - WALN設置 按照上圖修改&#xff1b; IP設置&#xff1a;從DHCP修改為靜態&#xff0c;IP地址&#xff1a;10.0.2.16 &#xff0c;網關&#xff1a;10.0.2.2 &#xff0c; DNS…

Wireshark 使用教程:網絡分析從入門到精通

一、引言 在網絡技術的廣闊領域中&#xff0c;網絡協議分析是一項至關重要的技能。Wireshark 作為一款開源且功能強大的網絡協議分析工具&#xff0c;被廣泛應用于網絡故障排查、網絡安全檢測以及網絡協議研究等諸多方面。本文將深入且詳細地介紹 Wireshark 的使用方法&#x…

Java 面試題 - ArrayList 和 LinkedList 的區別,哪個集合是線程安全的?

Java 面試題 - ArrayList 和 LinkedList 的區別&#xff0c;哪個集合是線程安全的&#xff1f; 在 Java 開發中&#xff0c;ArrayList和LinkedList是兩個常用的集合類&#xff0c;它們在數據結構和性能上有諸多不同&#xff0c;同時線程安全性也各有特點。深入理解這些差異&am…

nvim 打造成可用的IDE(2)

上一個 文章寫的太長了&#xff0c; 后來再寫東西 就一卡一卡的&#xff0c;所以新開一個。 主要是關于 bufferline的。 之前我的界面是這樣的。 這個圖標很不舒服有。 后來發現是在這里進行配置。 我也不知道&#xff0c;這個配置 我是從哪 抄過來的。 測試結果&#xff1…

升級 SpringBoot3 全項目講解 — 為什么 SpringBoot3 應該拋棄 Maven,搭配 Gradle 來使用?

學會這款 &#x1f525;全新設計的 Java 腳手架 &#xff0c;從此面試不再怕&#xff01; 隨著 Spring Boot 3 的發布&#xff0c;許多開發者開始考慮如何將現有項目升級到最新版本。Spring Boot 3 帶來了許多新特性&#xff0c;包括對 Java 17 的支持、更好的性能優化以及對 G…

Java學習筆記(二十三)

1 CacheEvict CacheEvict是Spring框架中用于清空緩存的注解。以下是對CacheEvict注解的詳細介紹&#xff1a; 1.1 作用 CacheEvict注解的主要作用是刪除緩存中的數據。在方法執行后或執行前&#xff08;根據配置&#xff09;&#xff0c;它可以清空指定的緩存項或整個緩存區…

如何優化Elasticsearch大文檔查詢?

記錄一次業務復雜場景下DSL優化的過程 背景 B端商城業務有一個場景就是客戶可見的產品列表是需要N多閘口及各種其它邏輯組合過濾的&#xff0c;各種閘口數據及產品數據都是存儲在ES的(有的是獨立索引&#xff0c;有的是作為產品屬性存儲在產品文檔上)。 在實際使用的過程中&a…

openCvSharp 計算機視覺圖片找茬

一、安裝包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、準備兩張圖片 三、編寫代碼 using OpenCv…

實戰:FRP內網穿透部署-支持ssh、web訪問

目錄 1 準備工作2 公網服務器部署server端2.1 frps.ini配置 3 內網客戶端部署client端3.1 frpc.ini配置&#xff08;內網服務器01&#xff09;3.2 frpc.ini配置&#xff08;內網服務器02&#xff09; 4 服務啟動腳本4.1 公網服務器 server4.2 內網服務器 client 2 systemctl常見…

Uniapp中實現加載更多、下拉刷新、返回頂部功能

一、加載更多&#xff1a; 在到達底部時&#xff0c;將新請求過來的數據追加到原來的數組即可&#xff1a; import {onReachBottom } from "dcloudio/uni-app";const pets ref([]); // 顯示數據function network() {uni.request({url: "https://api.thecatap…

C# 多線程 Task TPL任務并行

先總結一下 之前發展過程的要點 1&#xff1a; 為了保證多線程正確順序執行 線程同步 2&#xff1a; 為了節省操作系統線程資源 線程池 異步 方式管理 正常來講 使用這倆個要點 進行使用 多線程可以滿足開發使用需求 但是 新的問題產生了 那就是 多個異步操作 需要編寫大量的代…

C++單例模式的設計

單例模式&#xff08;Singleton Pattern&#xff09;是一種設計模式&#xff0c;用于確保一個類只有一個實例&#xff0c;并提供一個全局訪問點來訪問該實例。在C中&#xff0c;單例模式通常用于管理全局資源或共享狀態。 以下是C中實現單例模式的幾種常見方式&#xff1a; 懶…