STM32G4 電機外設篇(一) GPIO+UART

目錄

  • 一、STM32G4 電機外設篇(一) GPIO+UART
      • 1 GPIO
        • 1.1 STM32CUBEMX 配置以及Keil代碼
        • 1.2 代碼和實驗現象
      • 2 UART
        • 2.1 STM32CUBEMX 配置以及Keil代碼
        • 2.2 代碼和實驗現象
    • 附學習參考網址
      • 歡迎大家有問題評論交流 (* ^ ω ^)

一、STM32G4 電機外設篇(一) GPIO+UART

1 GPIO

1.1 STM32CUBEMX 配置以及Keil代碼
  • GPIO會控制二極管亮滅來指示板子的狀態
  • 也可以開關電機
  1. 打開STM32CUBEMX選擇MCU(中間更新太慢可以不更新)
  2. 選擇 MCU HSE為外部晶振
    在這里插入圖片描述
  3. 配置時鐘樹,PLL時鐘源選擇HSE,外部晶振24M,HCLK配置為170M;
    在這里插入圖片描述
  4. debug接口配置為串行接口
    在這里插入圖片描述
  5. 配置MCU的GPIO口,給GPIO口命名,開啟NVIC終端管理程序
    在這里插入圖片描述
  6. 配置項目路徑,項目位置,代碼生成方式,點擊生成代碼,打開工程
    在這里插入圖片描述
    7.打開Keil工程
1.2 代碼和實驗現象
  • 在主函數147行添加如下代碼
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(Button1_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);}if(Button2_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);}if(Button3_Pin == GPIO_Pin){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);}/* NOTE: This function should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}
  • 按照之前的文章接線,編譯代碼并下載,按下復位按鍵
  • 最終完成功能的實現
    • 三個按鈕可以分別控制LED燈的亮滅

2 UART

2.1 STM32CUBEMX 配置以及Keil代碼
  • 串口通訊在電機中一般使用TTL通訊,電機是電磁耦合干擾很大的設備,一般串口線和電源線是纏繞在一起走線的,所以電源的干擾型號也會耦合到串口通訊上,容易導致錯誤。所以一般使用485或者can來通訊。TTL一般只用來debug和實時觀察電機的一些狀態,打印波形等
  • 在上一章的基礎上,使能 UASRT3,對應 PB10和 PB11 I/O口,將波特率調整為
    115200Bits/s
  1. 打開之前的Cubemx程序,配置UART的Rx和Tx引腳
    • 詳細的配置要看STM32G4的手冊,舉例過采樣的配置,就可以更好的進行信號的采樣
      在這里插入圖片描述
  2. 配置中斷和DMA
    在這里插入圖片描述
    在這里插入圖片描述
  3. 生成代碼并在Keil中打開
2.2 代碼和實驗現象
  • 在主函數28行添加如下代碼,添加頭文件
    #include <stdio.h>

  • 在主函數160行添加如下代碼,按鍵實現LED的反轉,并且通過串口打印翻轉的信息

  • 同時把串口發送的字符轉變為數據流發送出去

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{/* Prevent unused argument(s) compilation warning */UNUSED(GPIO_Pin);if(Button1_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);printf("LED1 Toggle\r\n");}if(Button2_Pin == GPIO_Pin){HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);printf("LED2 Toggle\r\n");}if(Button3_Pin == GPIO_Pin){HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);printf("LED1 and LED2 open\r\n");}/* NOTE: This function should not be modified, when the callback is needed,the HAL_GPIO_EXTI_Callback could be implemented in the user file*/
}int fputc(int ch, FILE *f)
{while((USART3->ISR & 0x40) == 0);USART3->TDR = (uint8_t)ch;return ch;
}
  • 注意這里要打開microlib使用,否則printf可能會卡住
    在這里插入圖片描述

  • 按照之前的文章接線,編譯代碼并下載,按下復位按鍵

  • 打開串口調試助手,按下按鍵,實現實驗效果
    在這里插入圖片描述

  • 剩余UART部分參考視頻學習(包括DMA發送數據和中斷接收數據)

附學習參考網址

  1. STM32G4 FOC開發實戰

歡迎大家有問題評論交流 (* ^ ω ^)

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

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

相關文章

Kotlin 中集合遍歷有哪幾種方式?

1 for-in 循環&#xff08;最常用&#xff09; val list listOf("A", "B", "C") for (item in list) {print("$item ") }// A B C 2 forEach 高階函數 val list listOf("A", "B", "C") list.forEac…

尚硅谷redis7 99 springboot整合redis之連接集群

6381宕機&#xff0c;手動shutdown后在redis中&#xff0c;634自動上位變成master結點。 但是在springboot中卻沒有動態感知道redisCluster的最新集群消息&#xff0c;所以找不到我們要檢索的數據。原因是&#xff1a;SpringBoot 2.X版本,Redis默認的連接池采用 Lettuce&#…

AI 的早期萌芽?用 Swift 演繹約翰·康威的「生命游戲」

文章目錄 摘要描述題解答案題解代碼分析示例測試及結果時間復雜度空間復雜度總結 摘要 你有沒有想過&#xff0c;能不能通過簡單的規則模擬出生與死亡&#xff1f;「生命游戲」正是這樣一種充滿魅力的數學模擬系統。這篇文章我們來聊聊它的規則到底有多神奇&#xff0c;并用 S…

web ui自動化工具playwright

playwright是微軟開源的一款web ui自動化工具&#xff0c;該工具有很多亮點&#xff0c;解決以前困擾web UI自動化測試的很多難點。這篇博客將介紹playwright主要特點。 playwright支持錄制減少了編寫成本 如果要使用playwright的錄制功能&#xff0c;有兩種途徑&#xff0c;途…

移動安全Android——客戶端靜態安全

一、反編譯保護 測試工具 Jadx GitHub - skylot/jadx: Dex to Java decompiler PKID [下載]PKID-APP查殼工具-Android安全-看雪-安全社區|安全招聘|kanxue.com 測試流程 &#xff08;1&#xff09;通過Jadx對客戶端APK文件進行反編譯&#xff0c;觀察是否進行代碼混淆 &…

04-redis-分布式鎖-edisson

1 基本概念 百度百科&#xff1a;控制分布式系統之間同步訪問共享資源方式。 在分布式系統中&#xff0c;常常需要協調他們的動作。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源&#xff0c;那么訪問這些資源的時候&#xff0c;往往需要互斥來防止…

cf每日刷題

目錄 String&#xff08;800&#xff09; Skibidus and Amogu&#xff08;800&#xff09; Apples in Boxes&#xff08;1100&#xff09; String&#xff08;800&#xff09; https://codeforces.com/problemset/problem/2062/A #include <iostream> #include <…

AWS WebRTC:獲取ICE服務地址(part 1)

建立WebRTC連接的第二步是獲取ICE服務地址。 ICE全稱&#xff1a;Interactive Connectivity Establishment&#xff0c;建立互動連接。 ICE 服務地址&#xff0c;主要是 TURN 和 STUN 服務器的地址&#xff0c;用于 WebRTC 在 NAT 網絡環境中協商建立連接。 上代碼&#xff…

Python興趣匹配算法:從理論到實戰的進階指南

目錄 一、興趣匹配算法的技術棧解析 1. 基礎特征匹配階段 2. 向量空間模型階段 3. 深度學習階段 二、工程化實踐關鍵技術 1. 特征工程體系 2. 相似度計算優化 三、典型應用場景實現 1. 社交好友推薦系統 2. 電商商品推薦系統 四、性能優化與挑戰應對 1. 計算性能優…

【C語言】講解 程序分配的區域(新手)

目錄 代碼區 數據區 堆區 棧區 常量區 重點比較一下堆區與 棧區 總結&#xff1a; 前言&#xff1a; C語言程序的內存分配區域是理解其運行機制的重要部分。根據提供的多條證據&#xff0c;我們可以總結出C語言程序在運行時主要涉及以下五個關鍵內存區域&#xff1a; 代…

Go語言之接口與多態 -《Go語言實戰指南》

接口是 Go 語言實現 多態 的核心機制。本章將幫助你理解接口的設計哲學、動態行為&#xff0c;以及它如何讓 Go 實現面向接口編程的能力。 一、什么是接口&#xff1f; 接口是一組方法簽名的集合&#xff0c;任何類型只要實現了接口中聲明的所有方法&#xff0c;就被視為實現了…

JSR 303(即 Bean Validation)是一個通過??注解在 Java Bean 上定義和執行驗證規則??的規范

&#x1f6e0;? 一、JSR 303是什么&#xff1f; JSR 303&#xff08;Java Specification Requests 303&#xff09;是Java EE 6的子規范&#xff0c;全稱??Bean Validation??。它通過注解方式對JavaBean的屬性值進行標準化校驗&#xff0c;例如檢查非空、長度、格式等規則…

【圖像處理入門】3. 幾何變換基礎:從平移旋轉到插值魔法

摘要 掌握圖像的幾何變換相當于學會「圖像的空間魔法」。本文將帶你理解平移/旋轉/縮放的數學原理&#xff0c;掌握OpenCV中warpAffine和getAffineTransform的核心用法&#xff0c;對比最近鄰、雙線性等插值算法的優劣。通過圖像翻轉、鏡像、透視變換實戰&#xff0c;學會用變…

微信小程序學習目錄

個人簡介 &#x1f468;?&#x1f4bb;?個人主頁&#xff1a; 魔術師 &#x1f4d6;學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全棧發展 &#x1f6b4;個人狀態&#xff1a; 研發工程師&#xff0c;現效力于政務服務網事業 &#x1f1e8;&#x1f1f3;人生格言&…

QT 5.15.2 程序中文亂碼

1. 在.pro文件中添加&#xff1a; msvc { QMAKE_CXXFLAGS /source-charset:utf-8 /execution-charset:utf-8 }備注&#xff1a;.pro文件只有在選擇 qmake 方式才會生成。 [Cmake 只會生成 CMakeLists.txt 文件] 2. 在文件首部增加以下程序行 #pragma execution_character_s…

Unity UI設計優化與模式原則

前言 在 Unity 中設計高效且可維護的 UI 系統時&#xff0c;需要結合性能優化和設計模式兩大核心方向。以下是關鍵原則及實踐方法&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一起交流一下開發經驗呀&#xff01; 一、UI 性能…

CppCon 2014 學習: The Implementation of Value Types

“The Implementation of Value Types” 在C里&#xff0c;通常指的是如何設計和實現**值類型&#xff08;value types&#xff09;**的類&#xff0c;確保它們符合值語義&#xff08;value semantics&#xff09;&#xff0c;也就是說&#xff1a; 對象的賦值和拷貝操作應該是…

每日算法刷題Day19 5.31:leetcode二分答案3道題,用時1h

6. 475.供暖器(中等&#xff0c;學習check函數雙指針思想) 475. 供暖器 - 力扣&#xff08;LeetCode&#xff09; 思想 1.冬季已經來臨。 你的任務是設計一個有固定加熱半徑的供暖器向所有房屋供暖。在加熱器的加熱半徑范圍內的每個房屋都可以獲得供暖。現在&#xff0c;給出…

【計算機網絡】第2章:應用層—應用層協議原理

目錄 1. 網絡應用的體系結構 2. 客戶-服務器&#xff08;C/S&#xff09;體系結構 3. 對等體&#xff08;P2P&#xff09;體系結構 4. C/S 和 P2P 體系結構的混合體 Napster 即時通信 5. 進程通信 6. 分布式進程通信需要解決的問題 7. 問題1&#xff1a;對進程進行編址…

PHP+MySQL開發語言 在線下單訂水送水小程序源碼及搭建指南

隨著互聯網技術的不斷發展&#xff0c;在線下單訂水送水服務為人們所需要。分享一款 PHP 和 MySQL 搭建一個功能完善的在線訂水送水小程序源碼及搭建教程。這個系統將包含用戶端和管理端兩部分&#xff0c;用戶可以在線下單、查詢訂單狀態&#xff0c;管理員可以處理訂單、管理…