arm学习串口uart数据帧传输

这篇具有很好参考价值的文章主要介绍了arm学习串口uart数据帧传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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();

	gotwo();
	while(1)
	{
		//hal_put_char(hal_get_char()+1);
	
		hal_put_string(hal_get_string());
	}
	return 0;
}

uart4.h

#ifndef __UART4_H__
#define __UART4_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();

//换行
void gotwo();


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

#endif

uart4.c

#include"uart4.h"
static char p[128]={};
//初始化相关操作
void hal_uart4_init(){
	/*******RCC初始化***********/
	//pb2使能 
	RCC->MP_AHB4ENSETR |= (0x1 << 1);
	//pg11使能
	RCC->MP_AHB4ENSETR |= (0x1 << 6);
	//uart4使能
	RCC->MP_APB1ENSETR |= (0x1 << 16);
	/*******GPIO初始化***********/
	//pg11引脚初始化 模式设置为复用模式
	GPIOG->MODER &= (~(0x3 << 22));
	GPIOG->MODER  |= (0x1 << 23);
	//pg11引脚复用功能为TX_AFRH
	GPIOG->AFRH &=(~(0xf << 12));
	GPIOG->AFRH |=(0x6 << 12);
	//pb2引脚模式设置为复用模式
	GPIOB->MODER  &= (~(0x3 << 4));
	GPIOB->MODER |= (0x1 << 5);
	//pb2引脚复用功能为TX_AFRH
	GPIOB->AFRL &=(~(0xf << 8));
	GPIOB->AFRL |=(0x8 << 8);
	/*******UART4初始化***********/
	//设置串口UE=0
	USART4->CR1 &= (~(0x1));
	//设置1位起始位8位数据位
	USART4->CR1 &= (~(0x1 << 28));
	USART4->CR1 &= (~(0x1 << 12));
	//没有奇偶校验位
	USART4->CR1 &= (~(0x1 << 10));
	//设置1位停止位
	USART4->CR2 &= (~(0x3 << 12));
	//设置16倍采样率
	USART4->CR1 &= (~(0x1 << 15));
	//设置串口不分频
	USART4->PRESC &= (~(0xf));
	//设置串口波特率位115200
	USART4->BRR = 0x22b;
	//设置串口发送器使能
	USART4->CR1 &= (~(0x1 << 2));
	USART4->CR1 |= (0x1 << 2);
	//设置接口接收器使能
	USART4->CR1 &= (~(0x1 << 3));	
	USART4->CR1 |= (0x1 << 3);
	//设置串口使能
	USART4->CR1 |= (0x1);

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

	while(*string){
		while(!(USART4->ISR & (0x1 << 7)));
		//将发送的内容,赋值给发送数据寄存器
		USART4->TDR = *string;
		//判断一帧数据是否发送完成
		//读0:没有发送完成,需要等待 读1:发送完成
		while(!(USART4->ISR & (0x1 << 6)));
		string++;
	}
}
//接收一个字符
char hal_get_char(){
	//判断接收数据寄存器中是否接收到数据 ISR[5]
	while(!(USART4->ISR & (0x1 << 5)));
	//将接收数据寄存器中的内容读出来
	char ch;
	ch = USART4->RDR;
//	while(!(USART4->ISR & (0x1 << 6)));
	return ch;
}
//接受一个字符串
char* hal_get_string(){
	//循环进行接收
	//当键盘的回车键按键之后,代表字符串输出完成'\r'
	while(!(USART4->ISR & (0x1 << 7)));
	//将发送的内容,赋值给发送数据寄存器
	USART4->TDR = '\r';
	while(!(USART4->ISR & (0x1 << 6)));
	while(!(USART4->ISR & (0x1 << 7)));
	//将发送的内容,赋值给发送数据寄存器
	USART4->TDR = '\n';
	while(!(USART4->ISR & (0x1 << 6)));

	int i=0;
	while(1){
		while(!(USART4->ISR & (0x1 << 5)));
		p[i]= USART4->RDR;
		while(!(USART4->ISR & (0x1 << 6)));
		if(p[i] == '\r'){
			p[i]='\0';
			break;
		}
		hal_put_char(p[i]);
		i++;
		}
	return p;
}



//换行
void gotwo(){
	while(!(USART4->ISR & (0x1 << 7)));
	//将发送的内容,赋值给发送数据寄存器
	USART4->TDR = '\r';
	while(!(USART4->ISR & (0x1 << 6)));
	while(!(USART4->ISR & (0x1 << 7)));
	//将发送的内容,赋值给发送数据寄存器
	USART4->TDR = '\n';
	while(!(USART4->ISR & (0x1 << 6)));

}

arm学习串口uart数据帧传输,arm开发,学习,串口文章来源地址https://www.toymoban.com/news/detail-525453.html

到了这里,关于arm学习串口uart数据帧传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 物联网开发笔记(74)- 使用Micropython开发ESP32开发板之UART串口通信

    一、目的         这一节我们学习如何使用我们的ESP32开发板来进行串口通信,使用串口实现数据收发。 二、环境         ESP32 + USB转TTL线(3.3V) + Thonny IDE + 几根杜邦线 + Win10 接线方法:         ESP32和USB转TTL线都接在电脑USB口上,USB转TTL线的Tx接ESP32 P32,USB转TTL线

    2024年02月16日
    浏览(39)
  • ARM开发(cortex-A7核,UART总线实验)

    ---.h头文件--- ---.c功能实现文件--- ---.c主函数测试文件--- 结果: 字符:  字符串: 

    2024年02月12日
    浏览(31)
  • FPGA(Verilog)实现uart传输协议传输数据(含仿真)

    目录 实现功能: 1.接收uart串行数据,输出并行数据(1byte)。 2.输入并行数据(1byte),输出uart串行数据。 3.完成uart传输的1次环回。 uart协议的1帧数据传输 模块封装-port设置 Verilog代码实现 1.uart接收模块:接收串行数据,输出并行数据和其有效标志。 仿真结果: 2.uart发送模块:接收

    2024年04月16日
    浏览(34)
  • MSP430F5529学习笔记(五)——串口|UART

            我们在使用MSP430的时候大家会发现插上usb线后电脑上有两个端口标识,那么在进行串口通信时选择哪个呢。其实如图所示,上面的端口是用来进行串口通信的,下面的则是用来进行程序的下载,大家在使用的时候多加分辨即可。          当然熟悉单片机操作的

    2024年02月16日
    浏览(33)
  • 嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信

    大概学完这三种通信后,之后就先去学系统移植,其他的先暂时放下 串口全称叫做串行接口,通常也叫做 COM 接口。 UART:(Universal Asynchronous Receiver/Trasmitter)通用异步串行收发器。 USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行收发器,相比 UART多了

    2024年02月07日
    浏览(52)
  • 开发一个RISC-V上的操作系统(三)—— 串口驱动程序(UART)

    目录 文章传送门 一、什么是串口 二、本项目串口的FPGA实现 三、串口驱动程序的编写 四、上板测试 开发一个RISC-V上的操作系统(一)—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统(二)—— 系统引导程序(Bootloader)_Patarw_Li的博客-CSDN博客

    2024年02月15日
    浏览(103)
  • 用逻辑分析仪观察串口Uart数据波形

    只讨论嵌入式编程中较为常用的异步串行接口(Universal Asynchronous Receiver/Transmitter, UART),TTL电平。 串口的参数一般有: 1. 波特率 ,数据传输速率,单位bps(bits per second),即每秒传输的位数,常见的波特率有9600bps、19200bps、115200bps等;如果波特率为115200bps,则传输一个

    2024年02月06日
    浏览(38)
  • FPGA_数码管显示UART串口接收的数据

          实验目标 :通过电脑调试助手向FPGA的UART串口接收模块发送数据,然后数据可以稳定显示 在数码管上。       实验目的 : 练习UART串口模块和数码管的使用。之前已经有文章详细讲解了串口和数码管的开发,故这里直接提供设计思路供大家参考。 (串口文章链接)ht

    2024年02月13日
    浏览(40)
  • ARM开发,stm32mp157a-A7核(UART总线实验)

    ---.h头文件--- ---.c功能实现文件--- ---.c主函数测试文件--- 结果: 字符:  字符串: 

    2024年02月11日
    浏览(33)
  • ARM裸机开发-串口通信

    一、在使用EXYNOS4412的串口发送和接收的时候,首先要对EXYNOS4412的串口进行配置,我们使用轮询方式时的配置有哪些? 1、配置GPIO,使对应管脚作为串口的发送和接收管脚   GPA0CON寄存器[7:4][3:0] 0x22    GPA0PUD寄存器[3:0] 0 禁止上下拉电阻 2、配置串口单元本身寄存器    

    2024年02月11日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包