ARM_uart_发送接收字符 and 发送接收字符串

这篇具有很好参考价值的文章主要介绍了ARM_uart_发送接收字符 and 发送接收字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  include/uart4.h 


#ifndef __UART4_H__
#define __UART4_H__

#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"

//初始化相关操作
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

 src/yart4.c 

#include "uart4.h"
//PB2--->UART4_RX
//PG11--->UART4_TX

//初始化相关操作
void hal_uart4_init()
{
	//~~~~~~~~~~~~~RCC章节初始化~~~~~~~~~~~~~~~~~~~~~~~~//
	//使能AHB4初始化GPIOB GPIOG[1] [6] =1
	RCC->MP_AHB4ENSETR |= (0x21 << 1);   
	//使能APB1初始化[16]=1
	RCC->MP_APB1ENSETR |= (0x1 << 16); 

	//~~~~~~~~~~~~~GPIO章节初始化~~~~~~~~~~~~~~~~~~~~~~~//
	//GPIOB寄存器初始化 [5:4]=10
	GPIOB->MODER |= (0x1 << 5);         
	GPIOB->MODER &= (~(0x1 << 4));
	//GPIOB_AFRL设置引脚的复用功能模式[11:8]=1000
	GPIOB->AFRL |= (0x1 << 11);         
	GPIOB->AFRL &= (~(0x7 << 8));
	//GPIOG寄存器初始化 [23:22]=10
	GPIOG->MODER |= (0x1 << 23);       
	GPIOG->MODER &= (~(0x1 << 22));
	//GPIOG_AFRH设置引脚的复用功能模式[15:12]=0110
	GPIOG->AFRH |= (0xF << 15);         
	GPIOG->AFRH &= (~(0x9 << 15));   

	//~~~~~~~~~~~~~UART章节初始化~~~~~~~~~~~~~~~~~~~~~~//
	//0.设置串口UE=0 [0]=0
	USART4->CR1 &= (~(0x1));
	//1.设置1位的起始位,8位数据位 [28]=0 [12]=0 
	USART4->CR1 &= (~(0x1 << 12));
	USART4->CR1 &= (~(0x1 << 28));
	//2.没有校验位 CR1[10]=0
	USART4->CR1 &= (~(0x1 << 10));
	//3.设置1位停止位 CR2[13:12] =00
	USART4->CR2 &= (~(0x3 << 12));
	//4.设置16倍采样率 CR1[15]=0
	USART4->CR1 &= (~(0x1 << 15));
	//5.设置串口不分频 0000
	USART4->PRESC &= (~(0xF));
	//6.设置串口波特率为0x22b 时钟源/波特率  64000000/115200
	USART4->BRR = 0x22b;
	//7.设置串口发送器使能
	USART4->CR1 |= (0x1 << 3);
	//8.设置串口接收器使能
	USART4->CR1 |= (0x1 << 2);
	//9.设置串口使能
	USART4->CR1 |= (0x1);
}

//发送一个字符
void hal_put_char(const char str)
{
	//1.判断发送数据寄存器是否为空ISR[7]
	//特点:为空才可以发送下一位数据,为满则需要等待
	//读0:满,等待  读1:发送数据
	while(!(USART4->ISR & (0x1 << 7)));
	//2.将发送的内容,赋值给发送给数据寄存器
	USART4->TDR &= 0;  //寄存器清零
	USART4->TDR = str;
	//3.判断一帧数据是否发送完成 ISR[6]
	while(!(USART4->ISR & (0x1 << 6)));
	//读0:没有发送完成,需要等待  读1:发送完成
}

//接收一个字符
char hal_get_char()
{
	//1.判断接收数据寄存器是否接收到数据 ISR[5]
	while(!(USART4->ISR & (0x1 << 5)));
	//2.将接收数据寄存器中的内容读出来
	char ch = USART4->RDR;
	return ch;
}

//发送一个字符串
void hal_put_string(const char* string)
{
	//判断字符串输入完成标志'\0'
	const char *p = string;
	while(*p != '\0')
	{
		hal_put_char(*p);
		p++;
	}
	//一个字符一个字符进行发送
	hal_put_char('\r');
	hal_put_char('\n');
}

//接收一个字符串
char* hal_get_string()
{
	//循环进行接收
	static char string[32] = {0};
	int i;
	for(i = 0;i<32;i++)
	{
		string[i] = 0;
	}
	i = 0;
	while(1)
	{
		string[i] = hal_get_char();//板子接收
		hal_put_char(string[i]); //发送到串口工具中
		if(string[i] == '\r')
		{
			break;
		}
		i++;
	}
	string[i] = '\0';
	hal_put_char('\n');
	return string;
	//当键盘的回车键按键之后,代表字符串输出完成'\r'
}


 main.c

#include "uart4.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}
int main()
{	
	hal_uart4_init();
    hal_put_string("----please input--->");
	while(1)
	{
		
		hal_put_char(hal_get_char()+1);
		//hal_put_string(hal_get_string());
	}
	return 0;
}

 hal_put_char(hal_get_char()+1);

hal_put_string(ARM_uart_发送接收字符 and 发送接收字符串,arm开发hal_get_string()); 

ARM_uart_发送接收字符 and 发送接收字符串,arm开发

ARM_uart_发送接收字符 and 发送接收字符串,arm开发

ARM_uart_发送接收字符 and 发送接收字符串,arm开发please input 到下一行

结果就是

 文章来源地址https://www.toymoban.com/news/detail-538690.html

 

到了这里,关于ARM_uart_发送接收字符 and 发送接收字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯单片机 ——接收字符、字符串

     1定时器中断方法 (完整代码在文末!!)  2.定时的方法(推荐): 蓝桥杯单片机第十四届第三次模拟题_让我来瞅一瞅的博客-CSDN博客 定时器0——定时功能        判断接受数据是否完成  定时器1——串口功能           接受、发送数据   1.接受、发送 均为文本模式

    2023年04月17日
    浏览(42)
  • SpringCloudStreamkafka接收jsonarray字符串失败

    kafka作为消息队列,作为前端设备数据到后端消费的渠道,也被多个不同微服务消费 一个服务与前端边缘计算设备建立socket消息,接收实时交通事件推送,再将事件发送到kafka里面。此处使用的是Spring Kafka,普通的将事件列表数据转化为字符串后发送 事件信息,需要入库和实

    2024年02月07日
    浏览(38)
  • stm32串口发送字符、字符串(标准库)

    目录 一 芯片概述  二 代码编写 2.1 以串口2为例配置初始化代码 2.2 发送自定义长度的字符串 2.3 发送单个字符 2.4 自定义printf函数 三 完整代码 3.1 usart2.c 3.2 usart2.h 3.3 while(1) 本文以stm32f103c8t6系列芯片为例,使用自定义函数发送串口数据。 PA2为TX引脚,PA3为RX引脚 第一个变量

    2024年04月15日
    浏览(47)
  • STM32串口发送字符串

    在STM32串口学习中,串口发送字符串是必不可少的,但是 在学习过程中可能会遇到下面这个问题,就由我来给大家分享一下吧。 下面是封装的串口发送字符串的函数: 在mian.c文件中我们运行代码不会报错,但是我们可以看到Usart_SendString函数打印字符串时会出现警告。 当我们

    2024年02月12日
    浏览(41)
  • MSP432学习笔记10:串口接收字符串命令并执行任务

    今日终于得以继续我的MSP432电赛速通之路: 串口通信是单片机需要学习深入的一个很重要的板块,通过串口,我们可以实现许多数据收发与调试工作,可谓是非常方便快捷。 今日就跟随我的脚步,逐步扎实地学习 如何编程MSP432串口接收字符串命令 ,并使其执行一些任务,

    2024年02月10日
    浏览(78)
  • 使用Postman传json字符串,接收时却是null【已解决】

    使用postman发送post请求,在body里带1个json字符串  结果,sql日志打印显示参数都为空。 == Preparing: insert into `order` (user_id,commodity_code,count,money)values (?,?,?,?) == Parameters: null, null, null, null == Updates: 1 首先,如果你的Headers里已经配置好了 application/json格式:   那么,你将json字符串改

    2024年02月09日
    浏览(48)
  • 【ARM汇编】字符串大小写转换

    CSDN话题挑战赛第1期 活动详情地址 :话题PK赛 参赛话题 :汇编知识分享 话题描述 :我们的计算机知识就像一座金字塔,底层是数学,上面是数字电路,然后是汇编,再往上是操作系统、网络、数据库、高级编程语言、框架等等…我们不可能精通这个金子塔的每一层, 但是

    2024年01月16日
    浏览(68)
  • FPGA初步学习之串口发送模块【单字节和字符串的发送】

    UART 在发送或接收过程中的一帧数据由4部分组成,起始位、数据位、奇偶校验位和停止位,如图所示。其中,起始位标志着一帧数据的开始,停止位标志着一帧数据的结束,数据位是一帧数据中的有效数据。 通常用的串口数据帧格式是:8位数据位,无校验位,1位停止位。

    2024年02月14日
    浏览(45)
  • 【FPGA零基础学习之旅#14】串口发送字符串

    🎉欢迎来到FPGA专栏~串口发送字符串 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 🥝 发送Hello: 🥝 发送数字字符并自

    2024年02月08日
    浏览(45)
  • ESP8266模块MQTT AT Commands 发送 json字符串

    ESP8266 wifi模块介绍 ESP8266EX 由乐鑫公司开发,提供了⼀套⾼度集成的 Wi-Fi SoC 解决⽅案,其低功耗、紧凑设计和⾼稳定性可以满⾜⽤户的需求。 ESP8266EX 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能,既能够独⽴应⽤,也可以作为从机搭载于其他主机 MCU 运⾏。当 ESP8266EX 独⽴应⽤时

    2024年02月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包