当前位置: 首页 > news >正文

7/1 uart

 uart4.c

#include "uart4.h"//UART4_RX ====> PB2
//UART4_TX ====> PG11char rebuf[51] = {0};
//rcc/gpio/uart4初始化
void hal_uart4_init()
{/********RCC章节初始化*******///1.使能GPIOB组控制器 MP_AHB4ENSETR[1] = 1RCC->MP_AHB4ENSETR |= (0x1 << 1);//2.使能GPIOG组控制器  MP_AHB4ENSETR[6] = 1RCC->MP_AHB4ENSETR |= (0x6 << 1);//3.使能UART4组控制器  MP_AHB4ENSETR[16] = 1	RCC->MP_APB1ENSETR |= (0x1 << 16);/********GPIO章节初始化*******///1.将PB2和PG11设为复用功能模式GPIOB->MODER &= (~(0x3 << 4));//PB2GPIOB->MODER |= (0x2 << 4);GPIOG->MODER &= (~(0x3 << 22));//PG11GPIOG->MODER |= (0x2 << 22);//2.设置PB2和PG11引脚复用的功能GPIOB->AFRL &= (~(0xF << 8));//PB2GPIOB->AFRL |= (0x8 << 8);GPIOB->AFRH &= (~(0xF << 12));//PG11GPIOB->AFRH |= (0x6 << 12);/********UART章节初始化*******///1.设置初始化相关操作USART4->CR1 &= (~(0x1 << 12));USART4->CR1 &= (~(0x1 << 28));//设置8位数据位USART4->CR1 &= (~(0x1 << 15));//设置16倍采样率USART4->CR1 &= (~(0x1 << 10));//设置无校验位USART4->CR1 |= (0x1 << 3);//设置无发送位使能USART4->CR1 |= (0x1 << 2);//设置接收位使能USART4->CR1 |= 0x1;//设置串口使能//2.设置停止位USART4->CR2 &= (~(0x3 << 12));//设置串口位停止位//3.设置串口分频USART4->PRESC &= (~(0xF));//4.设置串口波特率USART4->BRR |= 0x22B;}//发送一个字符
void hal_put_char(const char str)
{//判断发送寄存器是否为空while(!(USART4->ISR) & (0x1 << 7)){USART4->TDR = str;}//判断是否发送完毕while(!(USART4->ISR) & (0x1 << 6)){return;	}}//发送一个字符串
void hal_put_string(const char* string)
{while(*string){hal_put_char(*string++);}hal_put_char('\n');hal_put_char('\r');
}//接收一个字符
char hal_get_char()
{char str = 0;//判断是否接收到数据while(!(USART4->ISR) &(0x1 << 5)){str = USART4->RDR;}return str;
}//接收一个字符串
char* hal_get_string()
{int i;for(i = 0;i < 50;i++){rebuf[i] = hal_get_char();hal_put_char(rebuf[i]);//判断是否接收完毕if(rebuf[i] == '\r'){break;}}rebuf[i] = '\0';hal_put_char('\n');hal_put_char('\r');return rebuf;}

uart4.h

#ifndef __UART4_H__
#define __UART4_H__#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"//rcc/gpio/uart4初始化
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

main.c

#include "uart4.h"int main(){//串口初始化hal_uart4_init();//char str;char *string;while(1){//串口读取字符//str = hal_get_char();//将字符+1并发回去//hal_put_char(str+1);//串口读取字符串string = hal_get_string();//将字符串发回去hal_put_string(string);}return 0;}

http://www.lryc.cn/news/388938.html

相关文章:

  • zdppy_api+vue3+antd开发前后端分离的预加载卡片实战案例
  • 别小看手机导航,这些隐藏功能大部分人可能都不知道
  • Lua实现链表(面向对象应用)
  • 每隔一个小时gc一次的问题
  • VBA数据库解决方案第十二讲:如何判断数据库中数据表是否存在
  • 五、Spring IoCDI ★ ✔
  • 计算机网络八股文
  • 科普文:一文搞懂jvm原理(四)运行时数据区
  • 《昇思25天学习打卡营第5天|数据变换 Transforms》
  • 详细分析Oracle修改默认的时间格式(四种方式)
  • 以 Vue 3 项目为例,你是否经常遇到 import 语句顺序混乱的问题?要想解决它其实很容易!
  • mysql数据库ibdata文件被误删后恢复数据的方法
  • eBPF技术揭秘:DeepFlow如何引领故障排查,提升运维效率
  • C++视觉开发 三.缺陷检测
  • 使用 Amazon Bedrock Converse API 简化大语言模型交互
  • 第二十一章 函数(Python)
  • 使用pyqt5编写一个七彩时钟
  • 【Linux】:命令行参数
  • 高考假期预习指南,送给迷茫的你
  • 独孤思维:负债了,还可以翻身吗
  • SwiftUI八与UIKIT交互
  • RedHat9 | 内部YUM本地源服务器搭建
  • 无偏归一化自适应心电ECG信号降噪方法(MATLAB)
  • AI基本概念(人工智能、机器学习、深度学习)
  • LabVIEW幅频特性测试系统
  • 校园卡手机卡怎么注销?
  • logback自定义规则脱敏
  • 高效批量复制与覆盖:一键实现文件管理,轻松应对同名文件,简化工作流程
  • vue3中使用Antv G6渲染树形结构并支持节点增删改
  • 【PB案例学习笔记】-26制作一个带浮动图标的工具栏