STM32學習和實踐筆記(27):USART串口通信實驗程序

本實驗所要實現的功能是:STM32F1通過USART1實現與PC機對話,STM32F1的USART1收到PC機發來的數據后原封不動的返回給PC機顯示。同時使用D1指示燈不斷閃爍提示系統正常運行。程序框架如下:

(1)初始化USART1,并使能串口接收中斷等

(2)編寫USART1中斷函數

(3)編寫主函數

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "usart.h"int main()
{u8 i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優先級分組LED_Init();USART1_Init(9600);while(1){i++;if(i%20 ==0){led1=!led1;//LED1閃,用來指示主程序循環是否運行}delay_ms(10);}
}

usart.c

#include "usart.h"void USART1_Init(u32 BoudRate)
{GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIOA時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9; //PA9為USART1的TXDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	//GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PA10為USART1的RXDGPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//GPIO_Init(GPIOA,&GPIO_InitStructure);USART_InitStructure.USART_BaudRate = BoudRate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode =USART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);  //使能串口1USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1發送中斷標志位USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟RXNE(接收中斷)//設置中斷優先級,使能中斷通道NVIC_InitStructure.NVIC_IRQChannel=	USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3;NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}void USART1_IRQHandler(void)
{u8 r;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){r=USART_ReceiveData(USART1);//開發板接收從電腦發過來的數據USART_SendData(USART1, r);//開發板再把收到的數據發送回電腦while(USART_GetFlagStatus(USART1, USART_FLAG_TC)!=SET);//等待,直到發送完成USART_ClearFlag(USART1, USART_FLAG_TC);//清除串口1發送中斷標志位}}

usart.h

#ifndef _usart_H
#define _usart_H
#include "system.h"void USART1_Init(u32 BoudRate);#endif

實際上機試驗是成功的!如下:

因為程序是使用的串口1,所以硬件連線上就是使用下載程序的USB線就可以,并不需要另外再增加連接線。

最開始出現這個錯誤:WriteFile function failed (win error code: 5)

估計下載程序的占用了這個串口,所以關掉下載程序,并且重啟電腦,只打開串口調試助手程序,按照開發攻略中的指導重新設置下串口調試助手,實驗就可以了。

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

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

相關文章

linux 開發常用命令

一、查看 相關服務 1.查看 數據庫 相關服務 這里以mysql 和 redis 為例 (1)使用 ps 命令 執行命令會列出,“mysql”、“redis”名稱的進程 ps aux | grep redis 示例: rootspray:~# ps aux | grep mysql mysql 1609816 0.…

Flutter 中的 FilterChip 小部件:全面指南

Flutter 中的 FilterChip 小部件:全面指南 在 Flutter 中,FilterChip 是一種特殊類型的 Chip,用于呈現過濾選項。用戶可以通過點擊 FilterChip 來應用相應的過濾條件,這在需要對列表或集合進行篩選的場景中非常有用,如…

51單片機實現俄羅斯方塊游戲編程

一、設計要求 (1)利用51單片機,設計一款俄羅斯方塊游戲,完成硬件電路的開發和程序的編寫調試; (2)采用LCD12864液晶作為游戲運行界面; (3)利用按鍵輸入靈活…

Spring Boot集成dubbo快速入門Demo

1.什么是dubbo? Apache Dubbo 是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。這意味著,使用 Dubbo 開發的微服務,將具備相互之間的遠程發現與通信能力, 同時利用 Dubbo 提供的豐富服務治理能力…

HTML飄落的花瓣

目錄 寫在前面 HTML???????簡介 完整代碼 代碼分析 系列推薦 寫在最后 寫在前面 本期小編給大家推薦HTML實現的飄落的花瓣,無需安裝軟件,直接下載即可打開~ HTML???????簡介 HTML(Hypertext Markup Language&#xff…

探索Playwright:Python下的Web自動化測試革命

在如今這個互聯網技術迅速發展的時代,web應用的質量直接關系著企業的聲譽和用戶的體驗。因此,自動化測試成為了保障軟件質量的重要手段之一。今天,我將帶大家詳細了解一款在測試領域大放異彩的神器——Playwright,并通過Python語言…

一覺醒來 AI科技圈發生的大小事兒 05月13日

📳博弈論讓 AI 更加正確、高效,LLM 與自己競爭 研究團隊設計了共識博弈,通過讓語言模型的生成器和判別器相互博弈來提高模型的準確性和內部一致性。這種方法不需要對基礎模型進行訓練或修改,可以在筆記本電腦上快速執行。研究結果…

基于微信小程序+JAVA Springboot 實現的【停車場小程序】app+后臺管理系統 (內附設計LW + PPT+ 源碼+ 演示視頻 下載)

項目名稱 項目名稱: 停車場微信小程序的設計與實現 在當前信息技術飛速發展的背景下,停車場微信小程序的開發成為了一個創新的解決方案,旨在提高停車場管理的效率和用戶的停車體驗。本項目通過深入分析現有停車場管理系統的不足&#xff0c…

內存屏障 - LINUX KERNEL MEMORY BARRIERS 上 與 下

內存屏障(Memory Barrier)是在計算機體系結構中使用的一種同步機制,用于確保在多線程或多核處理器環境中,對共享內存的操作按照預期順序進行。它們通過強制在特定點執行一些指令來規定內存訪問的順序,并防止內存亂序執…

弱網對抗的策略有哪些?

在弱網環境下,數據傳輸可能會面臨丟包、延遲、抖動等問題,因此采取合適的弱網對抗策略對于確保數據傳輸的穩定性和可靠性至關重要。以下是一些常見的弱網對抗策略: 數據壓縮:使用壓縮算法如Gzip、Brotli等對數據進行壓縮&#xf…

Linux-vi/vim

vi是一個文本編輯器,用于撰寫文檔或開發程序 vim是vi的增強版,功能一致,可視化效果更好一些,去鼠標化,編輯更加方便,可定制化 vim編輯器是一個模式化文本編輯工具 vim有三種模式 編輯模式、插入模式和末…

使用PageHelper分頁插件,發現獲取到的total總記錄數量不對,無法獲取到正確的total數量

目錄 1.1、錯誤描述 1.2、解決方案 1.1、錯誤描述 周一在工作中,寫了一個列表分頁的接口,其中使用的是PageHelper分頁依賴,原本想著挺簡單的,也就是使用PageHelper.startPage(pageNum, pageSize);方法就可以了,代碼…

Linux下COOLFluiD源碼編譯安裝及使用

目錄 軟件介紹 基本依賴 其它可選依賴 一、源碼下載 二、解壓縮(通過Github下載zip壓縮包格式) 三、編譯安裝 3.1 依賴項-BOOST 3.2 依賴項-Parmetis 3.3 依賴項-PETSc 3.4 安裝COOLFluiD 四、算例運行 軟件介紹 COOLFluiD(面向對象…

學術共振 美妙發聲 | 2024美沃斯大會完美收官,米蘭柏羽傾力承辦

5月10日-5月12日,為期3天的第十七屆美沃斯醫療美容大會在杭州國際博覽中心盛大舉辦,作為行業頂級學術交流平臺,本屆美沃斯大會不僅是醫美行業的一次學術交流盛會,更是一次深度探討行業未來的遠眺之窗。 5月9日,即美沃…

golang中switch-case及select-cas

switch a{ case b: 執行內容b case c: 執行內容c } golang中case后自帶break跳出功能&#xff0c;既&#xff1a;滿足case b 執行內容b后自動跳出&#xff0c;不會去走case c select { case <- ch1: 執行內容b case -<ch2: 執行內容c default: fmt.Println("chan…

定時備份docker-MySQL中的所有數據庫

backup_mysql.sh #!/bin/bash# 設置備份存儲目錄 backup_dir"/docker/hunqingyun-docker/mysql/backup"# 設置 MySQL 容器名稱和備份文件名 mysql_container"ruoyi-mysql" backup_file"$backup_dir/$(date %Y%m%d%H%M%S).sql"# MySQL root 用戶…

vue-router路由,帶參數的動態路由匹配(2024-05-14)

需求 需要將給定匹配模式的路由映射到同一個組件。例如&#xff0c;我們可能有一個 User 組件&#xff0c;它應該對所有用戶進行渲染&#xff0c;但用戶 ID 不同。在 Vue Router 中&#xff0c;我們可以在路徑中使用一個動態字段來實現&#xff0c;我們稱之為 路徑參數 &#…

添磚Java之路(其五)——封裝,String,StringBuilder類。

封裝&#xff1a; 封裝意義&#xff1a;更好的維護數據&#xff0c;讓使用者無需關心如何使用&#xff0c;只需要知道怎么使用。 Java Bean&#xff1a; 然后我們要知道Java Bean(實體類)標準。 1.對于這個類的成員都需要設為私有&#xff0c;而且要對外提供相應Get,Set的接…

組合商標申請如何風控提高通過率!

最近一個老客戶找到普推知產老楊&#xff0c;說要申請注冊一個新的商標&#xff0c;是一個組合商標&#xff0c;有圖形&#xff0c;兩行文字&#xff0c;一行文字的拼音&#xff0c;還有三個字母的簡稱&#xff0c;組合商標在申請時會進行拆分審查&#xff0c;圖形、文字、拼音…

【C++初階】第十一站:list的介紹及使用

目錄 list的介紹及使用 1.list的含義 2.list的介紹 3.list的使用 1.list的構造 2.list iterator的使用 3.list capacity 4.list element access 5 list modifiers 尾插尾刪 和 頭插頭刪 insert 和 erase resize swap clear 6.list sort and reverse 7.list copy vector copy li…