GPIO的使用--USART串口通信--傳感器控制數據

目錄

?一、串口通信

1、概念

2、原理圖

3、使用步驟

(1)尋找串口位置

(2)確定引腳編號

(3)編寫代碼

4、實驗結果

實驗代碼

main.c

usart.c

usart.h


?一、串口通信

1、概念

串行接口是一種可以將接收來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接收的串行數據流轉換為并行的數據字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。

串口通信(Serial Communications)的概念非常簡單,串口按位(bit)發送和接收字節的通信方式。

2、原理圖

串口本身也是通過引腳與外界通信的。通信過程如下:

3、使用步驟

串口不屬于輸入輸出部分,屬于復用部分,那么參數的配置也就和之前學習GPIO的不同了,大致思路:1.告訴引腳如何工作。2.告訴復用選擇哪一個。3.告訴串口如何工作。4.用一根實體線路(串口)連接兩臺設備。就完成啦

(1)尋找串口位置

(2)確定引腳編號

最終得到數據:PA9 :GPIOA組第9個成員。 PA10:GPIOA組第10個成員 USART1:串口第一個成員 組號:GPIOA 成員號:GPIO_Pin_9

(3)編寫代碼

a、時鐘使能GPIOA組,讓USART1工作

	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//時鐘使能A組,需要PA10和PA9工作RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能usart1

b、GPIO五大參數配置

    //GPIO參數配置,告訴GPIO PA9和PA10 如何工作GPIO_InitTypeDef gpio_struct;gpio_struct.GPIO_Mode=GPIO_Mode_AF;//復用模式gpio_struct.GPIO_OType=GPIO_OType_PP;//不影響,但是一般配推挽gpio_struct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;gpio_struct.GPIO_PuPd=GPIO_PuPd_NOPULL;gpio_struct.GPIO_Speed=GPIO_High_Speed;GPIO_Init(GPIOA,&gpio_struct);//讓PA9和PA10知道以復用模式工作

c、告訴復用模塊我的選擇

	//告訴復用模塊,到底想要復用哪一個功能,我們選擇了usartGPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);

d、USART1參數配置,此處程序要與代碼和串口接口參數設置一致

代碼參數

	//usart1參數配置,告訴它如何工作USART_InitTypeDef usart_struct;usart_struct.USART_BaudRate= 9600;  //速率usart_struct.USART_HardwareFlowControl= USART_HardwareFlowControl_None;  //流控,目前不啟用這塊//usart也是控制協議usart_struct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //既接收又發送usart_struct.USART_Parity= USART_Parity_No;  //校驗位,深化協議的時候弄usart_struct.USART_StopBits= USART_StopBits_1;  //停止位usart_struct.USART_WordLength= USART_WordLength_8b;  //有效負載

?程序參數

e、初始化和使能USART

	USART_Init(USART1,&usart_struct);USART_Cmd(USART1, ENABLE);//讓usart工作

f、發送和接收串口數據

//接收數據函數
USART_ReceiveData(USART1);
//數據發送函數
USART_SendData(USART1, j);

g、寫入運行代碼

接入傳感器(詳見上篇文章),燒錄檢查

4、實驗結果

實驗結果

實驗代碼

main.c

#include "stm32f4xx.h"                  // Device header
#include "led.h"
#include "key.h"
#include "BitBand.h"
#include "pir.h"
#include "delay.h"
#include <stdio.h>
#include "usart.h"//此函數可以讓printf打印字符串
int fputc(int ch,FILE* pf)
{USART_SendData(USART1,ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);	return ch;
}int main()
{Led_Init();Pir_Init();Usart_Init();uint16_t j='1';uint32_t key=0;while(1){//數據發送函數USART_SendData(USART1, j);key=PFin(14);if(key==1)//有人{PFout(12)=0;j='1';USART_SendData(USART1, j);printf("有人!小心!\n");}else//否則周邊沒有人{PFout(12)=1;j='0';USART_SendData(USART1, j);printf("沒人\n");}delay_ms(1000);}
}

usart.c

#include "stm32f4xx.h"                  // Device headervoid Usart_Init()
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//時鐘使能A組,需要PA10和PA9工作RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能usart1//GPIO參數配置,告訴GPIO PA9和PA10 如何工作GPIO_InitTypeDef gpio_struct;gpio_struct.GPIO_Mode=GPIO_Mode_AF;//復用模式gpio_struct.GPIO_OType=GPIO_OType_PP;//不影響,但是一般配推挽gpio_struct.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;gpio_struct.GPIO_PuPd=GPIO_PuPd_NOPULL;gpio_struct.GPIO_Speed=GPIO_High_Speed;GPIO_Init(GPIOA,&gpio_struct);//讓PA9和PA10知道以復用模式工作//告訴復用模塊,到底想要復用哪一個功能,我們選擇了usartGPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);//usart1參數配置,告訴它如何工作USART_InitTypeDef usart_struct;usart_struct.USART_BaudRate= 9600;  //速率usart_struct.USART_HardwareFlowControl= USART_HardwareFlowControl_None;  //流控,目前不啟用這塊//usart也是控制協議usart_struct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //既接收又發送usart_struct.USART_Parity= USART_Parity_No;  //校驗位,深化協議的時候弄usart_struct.USART_StopBits= USART_StopBits_1;  //停止位usart_struct.USART_WordLength= USART_WordLength_8b;  //有效負載USART_Init(USART1,&usart_struct);USART_Cmd(USART1, ENABLE);//讓usart工作}

usart.h

void Usart_Init(void);

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

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

相關文章

DiffiT

本文首發于AIWalker&#xff0c;歡迎關注。 https://arxiv.org/abs/2312.02139 https://github.com/NVlabs/DiffiT 擴散模型以其強大的表達能力和高樣本質量在許多領域得到了新的應用。對于樣本生成&#xff0c;這些模型依賴于通過迭代去噪生成圖像的去噪神經網絡。然而&#x…

SAP UI5 walkthrough step8 Translatable Texts

在這個章節&#xff0c;我們會將一些文本常量獨立出一個資源文件 這樣的話&#xff0c;可以方便這些文本常量被翻譯成任意的語言 這種國際化的操作&#xff0c;我們一般命名為i18n 新建一個文件i18n.properties webapp/i18n/i18n.properties (New) showHelloButtonTextSay …

vue3項目實現文檔 JSON 格式和 Excel 表格的在線預覽,(智能搜索,未驗證)

若要實現文檔 JSON 格式和 Excel 表格的在線預覽&#xff0c;你可以使用第三方庫來實現。對于文檔 JSON 格式&#xff0c;你可以使用 vue-json-pretty 庫來展示美觀的 JSON 數據&#xff1b;對于 Excel 表格&#xff0c;你可以使用 vue-excel-viewer 庫來完成在線預覽。下面是一…

Java、Spring Boot和事務管理

引言 在現代應用程序開發中&#xff0c;確保數據的一致性和可靠性是至關重要的。Java作為一種強大的編程語言&#xff0c;通過其廣泛的生態系統和強大的庫支持&#xff0c;為開發人員提供了構建高性能應用程序的豐富工具。Spring Boot是一個基于Spring框架的項目&#xff0c;它…

圖像的均方差和信噪比計算

圖像的均方差和信噪比計算 一、均方差1、公式2、代碼 二、信噪比1、公式2、代碼 圖像的均方差和信噪比公式及代碼&#xff0c;代碼基于opencv和C實現。 一、均方差 均方誤差&#xff0c;英文簡稱&#xff1a;MSE&#xff0c;英文全稱&#xff1a;“Mean Square Error”。 衡量…

接口測試-Jmeter使用

一、線程組 1.1 作用 線程組就是控制Jmeter用于執行測試的一組用戶 1.2 位置 右鍵點擊‘測試計劃’-->添加-->線程(用戶)-->線程組 1.3 特點 模擬多人操作線程組可以添加多個&#xff0c;多個線程組可以并行或者串行取樣器(請求)和邏輯控制器必須依賴線程組才能…

「Verilog學習筆記」多bit MUX同步器

專欄前言 本專欄的內容主要是記錄本人學習Verilog過程中的一些知識點&#xff0c;刷題網站用的是牛客網 輸入數據暫存在data_reg中&#xff0c;使能信號data_en用打兩拍的方式跨時鐘域傳輸到時鐘域B&#xff0c;最后data_out根據使能信號更新數據。data_en信號在A時鐘域用一個D…

Redis | Redis入門學習介紹及常見原理剖析

關注wx&#xff1a;CodingTechWork Redis介紹 概述 Redis是NoSQL&#xff0c;是key-value分布式內存數據庫。 緩存 緩存是將數據從慢的介質換到快的介質上&#xff0c;提高讀寫效率和性能&#xff0c;并降低數據庫的讀寫成本。內存的速度一般都遠遠大于硬盤的速度&#xf…

三個臭皮匠(ctr,nerdctl,crictl)頂一個諸葛亮(docker)

文章目錄 containerd簡介 nerdctl簡介安裝精簡 Minimal 安裝完整Full 安裝啟動服務 命令參數容器運行容器列出容器詳情容器日志容器進入容器停止容器刪除鏡像列表鏡像拉取鏡像標簽鏡像導出鏡像導入鏡像刪除鏡像構建配置tab鍵配置加速配置倉庫http方式https方式 ctr簡介命令參數…

12、虛函數的應用、虛析構函數

12、虛函數的應用、虛析構函數 運行時類型信息(RTTI)動態類型轉換(dynamic_cast)typeid操作符 虛 析構函數空虛析構函數 一個類中&#xff0c;除了構造函數和靜態成員函數外&#xff0c;任何函數都可以被聲明為虛函數 運行時類型信息(RTTI) 動態類型轉換(dynamic_cast) 用于…

AMC8美國數學競賽歷年真題集在線練習操作指南和2024年備考建議

今天是2023年12月10日&#xff0c;距離2024年的AMC8美國數學競賽的舉辦還有40天時間。據六分成長了解&#xff0c;有一些孩子報名參加了AMC8的機構培訓班系統學習&#xff0c;也有一些孩子選擇了自己自學備考。 有家長問AMC8的培訓是否一定要參加機構的培訓班學習&#xff1f;…

基于SpringBoot+thymeleaf協同過濾算法山河旅游推薦系統(Java畢業設計)

大家好&#xff0c;我是DeBug&#xff0c;很高興你能來閱讀&#xff01;作為一名熱愛編程的程序員&#xff0c;我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里&#xff0c;我將會結合實際項目經驗&#xff0c;分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

windows端口被占用怎么辦 怎么關閉那個占用的端口

目錄 這是出現的情況怎么解決了1.請打開這玩意2.輸入下面---查詢 先關端口的信息根據id獲得服務 上圖的8888 對應的ip 上圖就是134243.殺死進程134244.重啟服務 這是出現的情況 怎么解決了 1.請打開這玩意 2.輸入下面—查詢 先關端口的信息 netstat -ano過濾信息查詢想要的端…

JavaScript將函數作為參數傳入

其他函數中&#xff0c;是一種常見的編程技巧&#xff0c;稱為回調函數。在 JavaScript 中&#xff0c;函數被視為一等公民&#xff0c;也就是說&#xff0c;它們可以像任何其他類型的值一樣被傳遞、分配和操作。 示例&#xff1a; function greet(name) {console.log(Hello …

央企國企相關

文章目錄&#xff1a; 一&#xff1a;央企國企的區別 二&#xff1a;分類 三&#xff1a;相關 1.考什么 2.有什么崗位 3.什么時候考 4.去哪里報名和查看信息 5.喜歡招聘什么專業 6.其他疑問 一&#xff1a;央企國企的區別 央企國企一共有47萬多個&#xff08;央企131個…

【8.0.34-0 ubuntu 安裝Mysql 后無法鏈接是什么情況】

8.0.34-0 ubuntu 安裝Mysql 后無法鏈接是什么情況 檢查日志解決辦法 檢查日志 如果檢查一下帳號密碼沒問題看一下日志&#xff1a; Plugin mysql_native_password reported: mysql_native_password is deprecated and will be removed in a future release. Please use cachi…

java中的context對象?

java中的context對象&#xff1f; 大家好&#xff0c;我是微賺淘客系統的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我們將深入研究Java中的神秘利器——Context對象。在Java開發中&#xff0c;Context對象扮演著重要的角…

排序算法之六:快速排序(遞歸)

快速排序的基本思想 快速排序是Hoare于1962年提出的一種二叉樹結構的交換排序方法 其基本思想為&#xff1a; 任取待排序元素序列中的某元素作為基準值&#xff0c;按照該排序碼將待排序集合分割成兩子序列&#xff0c;左子序列中所有元素均小于基準值&#xff0c;右序列中所…

《深入理解計算機系統》學習筆記 - 第四課 - 浮點數

Floating Point 浮點數 文章目錄 Floating Point 浮點數分數二進制示例能代表的數浮點數的表示方式浮點數編碼規格化值規格化值編碼示例 非規格化的值特殊值 示例IEEE 編碼的一些特殊屬性四舍五入&#xff0c;相加&#xff0c;相乘四舍五入四舍五入的模式二進制數的四舍五入 浮…

【Qt5】setWindowFlags的標志有哪些?

2023年12月9日&#xff0c;周六晚上 窗口類型&#xff1a; Widget&#xff08;0x00000000&#xff09;&#xff1a;普通窗口部件。Window&#xff08;0x00000001&#xff09;&#xff1a;標準窗口。Dialog&#xff08;0x00000002 | Window&#xff09;&#xff1a;對話框&#…