ARMday6作業

?串口發送指令控制硬件工作

uart1.h

#ifndef __UART1_H__
#define __UART1_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h" 
void all_led_init();
void led1_on();
void led2_on();
void led3_on();
void led1_off();
void led2_off();
void led3_off();
void uart4_init();
void myputchar(char i);
char mygetchar();
char *gets();
void puts(char *s);
int mystrcmp(char *p1,char *p2);
#endif

?uart1.c

#include"uart1.h"
char buf[51]={0};
//串口數據初始化
void uart4_init()
{//1.UART4和GPIOB\GPIOG的時鐘使能RCC->MP_AHB4ENSETR|=(0x1<<1);//使能GPIOB時鐘RCC->MP_AHB4ENSETR|=(0x1<<6);//使能GPIOG時鐘RCC->MP_AHB4ENSETR|=(0x1<<16);//使能UART4的時鐘//2.設置PB2和PG11的管腳復用GPIOB->MODER&=(~(0x3<<4));GPIOB->MODER|=(0x2<<4);//設置復用GPIOB->AFRL &=(~(0xF<<8));GPIOB->AFRL |=(0x8<<8);//設置uart4功能復用//設置PB2和PG11的管腳復用GPIOG->MODER&=(~(0x3<<22));GPIOG->MODER|=(0x2<<22);//設置復用GPIOG->AFRH &=(~(0xF<<12));GPIOG->AFRH |=(0x6<<12);//設置uart4功能復用//3.先去設置串口禁用,方便設置數據格式USART4->CR1&=(~0x1);//4.設置8位數據位
USART4->CR1&=(~(0x1<<28));
USART4->CR1&=(~(0x1<<12));//5.設置沒有奇偶校驗USART4->CR1&=(~(0x1<<10));//6.設置16倍采樣USART4->CR1&=(~(0x1<<15));//7.設置1位停止位USART4->CR2&=(~(0x3<<12));//8.設置1分頻USART4->PRESC&=(~(0xF));//9.設置波特率115200bpsUSART4->BRR|=0x22B;//10.發送器、接收器使能USART4->CR1|=(0x1<<3);USART4->CR1|=(0x1<<2);//11.USART4->CR1|=(0x1);//
}
void myputchar(char c)
{//1.判斷TDR寄存器是否為空,如果為空,向TDR寄存器寫入數據while(!(USART4->ISR&(0x1<<7)));USART4->TDR=c;////阻塞等待數據傳輸完成,函數返回while(!(USART4->ISR&(0x1<<6)));//}
char mygetchar()
{ char c;//判斷RDR寄存器是否有就緒的數據,如果有就讀取,否則等待while(!(USART4->ISR&(0x1<<5)));c=USART4->RDR;return c;
}
//輸出一個字符串
void puts(char *s)
{while(*s){myputchar(*s);s++;}myputchar('\n');myputchar('\r');
}//讀取一個字符串
char *gets()
{unsigned int i;for(i=0;i<50;i++){buf[i]=mygetchar();myputchar(buf[i]);if(buf[i]=='\r')break;}buf[i]='\0';myputchar('\n');return buf;
}
void all_led_init()
{// 1.使能外設時鐘RCC->MP_AHB4ENSETR|=(0X3<<4);// 2.設置PF10 PE10 PE8為輸出輸出GPIOE->MODER &= (~(0x3 << 20));GPIOE->MODER |= (0x1 << 20);GPIOF->MODER &= (~(0x3 << 20));GPIOF->MODER |= (0x1 << 20);GPIOE->MODER &= (~(0x3 << 16));GPIOE->MODER |= (0x1 << 16);// 3.設置推挽輸出GPIOE->OTYPER &= (~(0x1 << 10));GPIOF->OTYPER &= (~(0x1 << 10));GPIOE->OTYPER &= (~(0x1 << 8));// 4.設置輸出速度為低速GPIOE->OSPEEDR &= (~(0x3 << 20));GPIOF->OSPEEDR &= (~(0x3 << 20));GPIOE->OSPEEDR &= (~(0x3 << 16));// 5.設置無上拉下拉GPIOE-> PUPDR&= (~(0x3 << 20));GPIOF-> PUPDR&= (~(0x3 << 20));GPIOE-> PUPDR&= (~(0x3 << 16));
}
void led1_on()
{GPIOE->ODR |= (0x1 << 10);
}
void led2_on()
{GPIOF->ODR |= (0x1 << 10);
}
void led3_on()
{GPIOE->ODR |= (0x1 << 8);
}void led1_off()
{GPIOE->ODR &= (~(0x1 << 10));
}
void led2_off()
{GPIOF->ODR &= (~(0x1 << 10));
}
void led3_off()
{GPIOE->ODR &= (~(0x1 << 8));
}
int mystrcmp(char *p1,char *p2)
{int ret;while(*p1 == *p2 && *p1 != '\0' && *p2 != '\0'){p1++;p2++;}ret = *p1 - *p2; // 返回值if(ret==0)return 0;elsereturn 1;
}

?main.c

#include"uart1.h"
//封裝延時函數
void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}
}
int main()
{//串口的初始化uart4_init();char *str;all_led_init();//LED初始化//現象是發送一個a串口工具打印一個bwhile(1){myputchar('\n');myputchar('\r');//2.從串口讀取一個字符串str=gets();puts(str);//3.回顯輸入的字符串if(mystrcmp(str,"led1_on")==0){led1_on();}else if(mystrcmp(str,"led1_off")==0){led1_off();}else if(mystrcmp(str,"led2_on")==0){led2_on();}else if(mystrcmp(str,"led2_off")==0){led2_off();}else if(mystrcmp(str,"led3_on")==0){led3_on();}else if(mystrcmp(str,"led3_off")==0){led3_off();}}return 0;
}

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

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

相關文章

代碼隨想錄二刷 | 二叉樹 | 110.平衡二叉樹

代碼隨想錄二刷 &#xff5c; 二叉樹 &#xff5c; 110.平衡二叉樹 題目描述解題思路遞歸迭代 代碼實現遞歸法迭代法 題目描述 110.平衡二叉樹 給定一個二叉樹&#xff0c;判斷它是否是高度平衡的二叉樹。 本題中&#xff0c;一棵高度平衡二叉樹定義為&#xff1a; 一個二叉…

EMNLP 2023 獲獎論文公布,大模型、NLP等領域火爆

EMNLP是計算語言學和自然語言處理領域頂級國際會議之一&#xff0c;屬于CCF B類&#xff0c;是由 ACL 下屬的SIGDAT小組主辦的NLP領域頂級國際會議&#xff0c;一年舉辦一次。相較于ACL&#xff0c;EMNLP更偏向于NLP在各個領域解決方案的學術探討。 今年的EMNLP 2023 已于2023…

table表格table/tr/td寬度和高度的設置

關于html中table表格tr,td的?度和寬度 做?頁的時候經常會遇到各種各樣的問題&#xff0c;經常遇到的?個就是會碰到表格被內容撐開的問題。 設置table樣式為 table-layout: fixed; 寬度可以了&#xff0c;但是高度會被撐高。怎么設置都不行&#xff0c;只能給這個td標簽單獨…

【Linux】 線程池

線程池 什么是線程池&#xff1f; 一次預先申請一批線程&#xff0c;讓這批線程有任務&#xff0c;就處理任務&#xff1b;沒任務&#xff0c;就處于等待狀態。 為什么要有線程池&#xff1f; 以空間換時間&#xff0c;預先申請一批線程&#xff0c;當有任務到來&#xff0c;可…

將rtsp視頻流發送到AWS Kinesis Video Streams的方案——使用Gstreamer(C++) Command Line

大綱 1 創建Kinesis Video Streams1.1 創建視頻流1.2 記錄Creation Time 2 創建策略2.1 賦予權限2.2 限制資源2.3 Json格式描述&#xff08;或上面手工設置&#xff09;2.4 注意事項 3 創建IAM用戶3.1 生成密鑰對3.2 附加策略3.3 記錄訪問密鑰對 4 編譯C 創建者庫5 發送6 檢查參…

JavaScript <關于逆向RSA非對稱加密算法的案例(代碼剖析篇)>--案例(五點一)

引用上文: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/134857857 剖析: var bitsPerDigit16; // 每個數組元素可以表示的二進制位數// 數組復制函數&#xff0c;將源數組部分復制到目標數組的指定位置 function arrayCopy(src, srcStart, dest, destStart, n) {var m…

國內地址地區智能解析,無需完整地址也能正確匹配

頁面直接引入使用 已打包成單文件dist/bundle.js 可以直接通過標簽引用 <script src="./bundle.js"></script> <script>var results = AddressParse.parse(福建省福州市福清市石竹街道義明綜合樓3F,15000000000,asseek);console.log(results);…

OD機考真題搜集:服務失效判斷

題目 某系統中有眾多服務,每個服務用字符串(只包含字母和數字,長度<=10)唯一標識,服務間可能有依賴關系,如A依賴B,則當B故障時導致A也故障。 依賴具有傳遞性,如A依賴B,B依賴C,當C故障時導致B故障,也導致A故障。 給出所有依賴關系,以及當前已知故障服務,要求輸…

git提交代碼報錯Git: husky > pre-commit

目錄 git提交代碼報錯原因解決方法&#xff08;三種&#xff09;1、第一種2、第二種3、第三種 git提交代碼報錯原因 這個問題是因為當你在終端輸入git commit -m “XXX”,提交代碼的時候,pre-commit(客戶端)鉤子&#xff0c;它會在Git鍵入提交信息前運行做代碼風格檢查。如果代…

Kotlin 中密封類、枚舉類與密封接口的對比分析

在 Kotlin 編程語言中&#xff0c;密封類&#xff08;Sealed Classes&#xff09;、枚舉類&#xff08;Enum Classes&#xff09;和密封接口&#xff08;Sealed Interfaces&#xff09;是處理一組固定類型的強大工具。它們在 Kotlin 中扮演著特殊的角色&#xff0c;特別是在創建…

【小白專用】MySQL創建數據庫和創建數據表

1.在Windows開始搜索輸入Mysql,并選擇第一個打開。 2.輸入安裝時的密碼 3.說明安裝成功。 二、創建數據庫 1. 連接 MySQL 輸入 mysql -u root -p 命令&#xff0c;回車&#xff0c;然后輸入 MySQL 的密碼(不要忘記了密碼)&#xff0c;再回車&#xff0c;就連接上 MySQL 了。 …

數據庫常用鎖

數據庫鎖是一種用于管理并發訪問的機制&#xff0c;以確保數據的一致性和完整性。在并發訪問的情況下&#xff0c;多個事務可能同時嘗試訪問相同的數據&#xff0c;而數據庫鎖能夠協調這些訪問&#xff0c;防止數據不一致的問題。以下是一些常見的數據庫鎖及其詳細解釋&#xf…

C語言-統計素數并求和

本題要求統計給定整數M和N區間內素數的個數并對它們求和。 輸入格式: 輸入在一行中給出兩個正整數M和N&#xff08;1≤M≤N≤500&#xff09;。 輸出格式: 在一行中順序輸出M和N區間內素數的個數以及它們的和&#xff0c;數字間以空格分隔。 輸入樣例: 10 31輸出樣例: 7…

深入Redis過程-持久化

目錄 redis實現持久化 RDB 觸發機制-定期方法 定期-手動觸發 save bgsave 定期-自動觸發 AOF 開啟AOF功能 刷新緩沖區策略 重寫機制 混合持久化 Redis事務 事務相關的命令 MULTI EXEC DISCARD WATCH redis實現持久化 RDB RDB叫做Redis數據備份文件&#xf…

強大的公式編輯器 —— MathType最新版本安裝與使用

強大的公式編輯器 —— MathType最新版本安裝與使用 由于使用了很長時間的機械硬盤出現壞道&#xff0c;安裝在其中的MathType6.9&#xff08;精簡版&#xff09;也沒辦法使用了&#xff0c;本來想安裝個高版本的MathType&#xff0c;比如MathType7.4&#xff0c;但在網上苦苦…

如何更改Jupyter Notebook中的環境?

1.首先&#xff0c;打開終端 2.接著&#xff0c;分別輸入以下命令 conda env list 把EXPose替換為自己的環境變量 conda activate EXPose 3.接下來安裝‘ ipykernel ’軟件包 conda install ipykernel 4. 將該環境添加到Jupyter Notebook中&#xff1b;在Jupyter Notebook…

HTB Surveillance

Surveillance 2023年12月10日 12:13:35User nmap Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-10 12:15 CST Stats: 0:00:37 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan Connect Scan Timing: About 59.83% done

小白第一次開私服怎么吸引玩家

大家好&#xff0c;我是咕嚕-凱撒&#xff0c;在現在這個網絡社會很多人為了放松一下會選擇打打游戲&#xff0c;私服也就成為了許多玩家為了尋找新鮮體驗的熱門選擇&#xff0c;很多小白就發現了這個契機但是吸引玩家加入自己的服務器也就成了一個比較頭疼的問題&#xff0c;下…

Wrong number of values of control parameter 2(Halcon 錯誤代碼:1402)

threshold (ImageReduced1, Region, 0,min2(75,Min)) 程序運行到這一句&#xff0c;出現錯誤 原因是其中的參數Min為空數組 解決方案&#xff1a;判斷了下可以輸出Min的區域是否存在&#xff0c;不存在跳過這一步。

八叉樹bt文件轉為grid文件的代碼及編譯流程

目的 點云文件轉為八叉樹文件 代碼 在一個文件夾中新建兩個文件&#xff0c;pcd2bt.cpp和CMakeLists.txt&#xff0c;分別寫入&#xff1a; grid3d_node.cpp #include <ros/ros.h> #include <string> #include "grid3d.hpp"int main(int argc, char…