0701_ARM5

練習:使用usart4
main.c

#include "uart4.h"int main()
{// 初始化 UART4hal_uart4_init();while (1) {// 發送一個字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0;
}

usart4.c

#include "uart4.h"//******引腳PB2讀取 PG11寫入*****//rcc,gpio,uart,初始化
void hal_uart4_init(){//rcc章節初始化//1.使能GPIOB組控制器RCC->MP_AHB4ENSETR |= (0X1<<1);//2.是能GPIOG組控制器RCC->MP_AHB4ENSETR |= (0X1<<6);//3.是能UART4控制器RCC->MP_APB1ENSETR |= (0x1<<16);//GPIO章節初始化//1.GPIOB_MODE寄存器初始化  設置對應引腳模式功能 復用功能GPIOB->MODER &= ~(0x3<<4);     //MODER默認為0xffffffff 先將4,5為清零GPIOB->MODER |= (0x2<<4);//2.GPIOG_MODE寄存器初始化  設置對應引腳模式功能 復用功能GPIOG->MODER &= ~(0x3<<22);     GPIOG->MODER |= (0x2<<22);//3.GPIOB_AFRL寄存器設置對應引腳復用功能GPIOB->AFRL &= ~(0x0f<<8);GPIOB->AFRL |= (0x8<<8);       //AFRL默認為0x00000000 所以這里直接按位|//4.GPIOG_AFRH寄存器設置對應引腳復用功能GPIOG->AFRH &= ~(0x0f<<12);GPIOG->AFRH |= (0x6<<12);       //PG11在AFRH寄存器中//UART章節初始化//1.USART4串口控制寄存器初始化//USART4_CR1初始值為0x00000000//1.8位數據位USART4->CR1 &= ~(0x1<<12);USART4->CR1 &= ~(0x1<<28);//2.16倍采樣率USART4->CR1 &= ~(0X1<<15);//3.無校驗位USART4->CR1 &= ~(0X1<<10);//4.設置發送和接收使能USART4->CR1 |= (0x6<<1);//USART4_CR2寄存器 設置停止位//USART4_CR2 默認值 0x00000000//5.1個停止位USART4->CR2 &= ~(0X3<<12);//6.設置波特率USART4->BRR = 0X22B;//7.設置串口使能USART4->CR1 |= 0x1;//USART4_PRESC 寄存器設置串口分配//USART4_PRESC初始值位0x00000000//8.不分頻USART4->PRESC &= ~(0x0f);}
//發送字符
void hal_put_char(const char str){//判斷發送數據是否為空while(!(USART4->ISR & (0X1<<7))){//將數據寫入寄存器中}USART4->TDR = str;while(!(USART4->ISR & (0X1<<6))){}
}
//發送字符串
void hal_put_string(const char *string){//判斷發送數據寄存器是否為空while(*string){//將數據寫入寄存器中hal_put_char(*string++);}
}
//接收字符
char hal_get_char(){//判斷接收數據是否為空char c=0;while(!(USART4->ISR & (0X1<<5))){}c=USART4->RDR;return c;
}
// 接收字符串
char* hal_get_string(){static char str[128]; // 使用靜態變量以保持內容int i = 0;for(i = 0; i < 127; i++){ // 確保有空間存放'\0'str[i] = hal_get_char();if(str[i] == '\n' || str[i]=='\r'){ // 也考慮回車作為結束符break;}}str[i] = '\0'; // 確保字符串以null結尾return str;
}

usart4.h

#ifndef __UART4_H__
#define  __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
//rcc,gpio,uart,初始化
void hal_uart4_init();
//發送一個字符
void hal_put_char(const char str);
//發送一個字符串
void hal_put_string(const char *string);
//接收一個字符串
char hal_get_char();
//接收一個字符串
char *hal_get_string();#endif

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

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

相關文章

ctfshow-web入門-文件包含(web88、web116、web117)

目錄 1、web88 2、web116 3、web117 1、web88 沒有過濾冒號 : &#xff0c;可以使用 data 協議&#xff0c;但是過濾了括號和等號&#xff0c;因此需要編碼繞過一下。 這里有點問題&#xff0c;我 (ls) 后加上分號發現不行&#xff0c;可能是編碼結果有加號&#xff0c;題目…

Spark MLLib面試題你會幾道?(萬字長文)

目錄 簡述Spark MLLib的主要組件及其功能 Spark MLLib支持哪些機器學習算法? 解釋RDD(彈性分布式數據集)的概念及其在MLLib中的作用 在Spark MLLib中,LabeledPoint是什么?如何使用它? 描述DataFrame和Dataset API在Spark MLLib中的重要性 什么是ML Pipeline?它解決…

【反悔堆 優先隊列 臨項交換 決策包容性】630. 課程表 III

本文涉及知識點 貪心 反悔堆 優先隊列 臨項交換 Leetcode630. 課程表 III 這里有 n 門不同的在線課程&#xff0c;按從 1 到 n 編號。給你一個數組 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 門課將會 持續 上 durationi 天課&#xff0c;并且必…

WordPress網站違法關鍵詞字過濾插件下載text-filter

插件下載地址&#xff1a;https://www.wpadmin.cn/2025.html 插件介紹 WordPress網站違法關鍵詞字過濾插件text-filter由本站原創開發,支持中英文關鍵字自動替換成**號&#xff0c;可以通過自定義保存修改按鈕增加“預設關鍵字”&#xff0c;也可以導入定義好的txt文本形式的關…

實現模型貼圖的移動縮放旋轉

技術&#xff1a;threejscanvasfabric 效果圖&#xff1a; 原理&#xff1a;threejs中沒有局部貼圖的效果&#xff0c;只能通過map 的方式貼到模型上&#xff0c;所以說換一種方式來實現&#xff0c;通過canvasfabric來實現圖片的移動縮放旋轉&#xff0c;然后將整個畫布以map…

數據集 | 人臉公開數據集的介紹及下載地址

本文介紹了人臉相關算法的數據集。 1.人臉數據集詳情 1.1.Labeled Faces in the Wild (LFW) 論文 下載地址&#xff1a;LFW Face Database : Main (umass.edu) 是目前人臉識別的常用測試集&#xff0c;其中提供的人臉圖片均來源于生活中的自然場景&#xff0c;因此識別難度會…

DDR的拓撲與仿真

T型拓撲 vs Fly-by 由于T型拓撲在地址、命令和時鐘都是同時到達每個DDR芯片&#xff0c;所以同步的切換噪聲會疊加在一起&#xff0c;DDR越多這個信號上疊加的噪聲越大&#xff0c;T型拓撲的優點是地址、命令和時鐘都是同時到達&#xff0c;所以不需要做寫均衡Write leveling。…

Node.js 生成vue組件

在項目根目錄下創建 create.js /*** 腳本生成vue組件* 主要是利用node自帶的fs模塊操作文件的寫入* ===========================================* 準備步驟:* 1.輸入作者名* 2.輸入文件名* 3.輸入菜單名* 4.輸入文件地址* ============================================* 操…

【路徑規劃】基于A星算法實現機器人柵格地圖徑規劃附Matlab代碼

% 機器人柵格地圖路徑規劃(A*算法) % 假設你已經有了柵格地圖數據和起點終點坐標 % 柵格地圖數據 grid_map = your_grid_map_data; % 柵格地圖數據,0表示可行區域,1表示障礙物區域 % 起點和終點坐標 start = your_start_coordinates; % 起點坐標,格式為[x, y] goal = yo…

【3D->2D轉換(1)】LSS(提升,投放,捕捉)

Lift, Splat, Shoot 這是一個端到端架構&#xff0c;直接從任意數量的攝像頭數據提取給定圖像場景的鳥瞰圖表示。將每個圖像分別“提升&#xff08;lift&#xff09;”到每個攝像頭的視錐&#xff08;frustum&#xff09;&#xff0c;然后將所有視錐“投放&#xff08;splat&a…

AI助手崛起:開發者的新伙伴還是未來替代者?

你好&#xff0c;我是三橋君。 自從 ChatGPT 問市以來&#xff0c;AI 將取代開發者的聲音不絕于耳&#xff0c;至今還是互聯網異常火熱的問題。 在軟件開發領域&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;正在改變開發者的工作方式。無論是代碼生成、錯誤檢測還是…

【JavaWeb程序設計】JSP編程

目錄 一、編寫JSP頁面&#xff0c;在界面上顯示1-9&#xff0c;9個鏈接&#xff0c;單擊每個鏈接&#xff0c;能夠在另一個頁面打印該數字的平方。 1. 運行截圖 2. 第一個jsp頁面&#xff08;index.jsp&#xff09; 3. 第二個jsp頁面&#xff08;square.jsp&#xff09; 二…

RedHat運維-Linux存儲管理基礎1-添加分區、文件系統、持續性掛載

1. 假如當前系統上ls -alh /dev | grep ^b的結果如下所示&#xff0c;那么&#xff1a; [rhcerhel9 ~]$ ls -alh /dev | grep ^b brw-rw----. 1 root disk 253, 0 Jun 7 19:46 dm-0 brw-rw----. 1 root disk 253, 1 Jun 7 19:46 dm-1 brw-rw----. 1 root disk …

Arc for Windows 無法使用?一篇文章教會你!

&#x1f44b; 大家好&#xff0c;我是 Beast Cheng &#x1f4eb; 聯系我&#xff1a;458290771qq.com &#x1f331; 接合作、推廣…… 什么是Arc瀏覽器&#xff1f; Arc瀏覽器是The Browser Conpany使用Swift語言開發的一款瀏覽器&#xff0c;Arc瀏覽器由其漂亮的側邊欄聞名…

Python 異步編程介紹與代碼示例

Python 異步編程介紹與代碼示例 一、異步編程概述 異步編程是一種編程范式&#xff0c;它旨在處理那些需要等待I/O操作完成或執行耗時任務的情況。在傳統的同步編程中&#xff0c;代碼會按照順序逐行執行&#xff0c;直到遇到一個耗時操作&#xff0c;它會阻塞程序的執行直到…

Codeforces Round 903 (Div. 3)A~F

A.Dont Try to Count 輸入樣例&#xff1a; 12 1 5 a aaaaa 5 5 eforc force 2 5 ab ababa 3 5 aba ababa 4 3 babb bbb 5 1 aaaaa a 4 2 aabb ba 2 8 bk kbkbkbkb 12 2 fjdgmujlcont tf 2 2 aa aa 3 5 abb babba 1 19 m mmmmmmmmmmmmmmmmmmm輸出樣例&#xff1a; 3 1 2 -1 1 0…

1999-2022年企業持續綠色創新水平數據

企業持續綠色創新水平數據為研究者提供了評估企業在綠色技術領域創新持續性和能力的重要視角。以下是對企業持續綠色創新水平數據的介紹&#xff1a; 數據簡介 定義&#xff1a;企業持續綠色創新水平反映了企業在一定時期內綠色專利申請的持續性和創新能力。計算方法&#xf…

初識STM32:開發方式及環境

STM32的編程模型 假如使用C語言的方式寫了一段程序&#xff0c;這段程序首先會被燒錄到芯片當中&#xff08;Flash存儲器中&#xff09;&#xff0c;Flash存儲器中的程序會逐條的進入CPU里面去執行。 CPU相當于人的一個大腦&#xff0c;雖然能執行運算和執行指令&#xff0c;…

通信協議:常見的芯片內通信協議

相關閱讀 通信協議https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文將簡單介紹一些常見的芯片間通信協議&#xff0c;但不會涉及到協議的具體細節。 一、AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;…

MySQL之備份與恢復(七)

備份與恢復 文件系統快照 規劃LVM備份 LVM快照備份也是有開銷的。服務器寫到原始卷的越多&#xff0c;引發的額外開銷也越多。當服務器隨機修改許多不同塊時&#xff0c;磁頭需要需要自寫時復制空間來來回回尋址&#xff0c;并且將數據的老版本寫到寫時復制空間。從快照中讀…