arm:day6

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

实现UART通信:

1.键盘输入一个字符'a',串口工具显示'b'

arm:day6,arm开发

 2.键盘输入一个字符串"nihao",串口工具显示"nihao"

arm:day6,arm开发

uart.h

#ifndef __UART4_H__
#define __UART4_H__

#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.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

uart4.c

#include "uart4.h"

extern void delay_ms(int ms);

//PB2 --> UART4_RX
//PG11 --> UART4_TX
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章节
	//复用功能模式 复用功能为串口接收/发送
    GPIOB->MODER &= (~(0x3 << 4));
    GPIOB->MODER |= (0x2 << 4);
    GPIOB->AFRL &= (~(0xf << 8));
    GPIOB->AFRL |= (0x1 << 11);

    GPIOG->MODER &= (~(0x3 << 22));
    GPIOG->MODER |= (0x2 << 22);
    GPIOG->AFRH &= (~(0xf << 12));
    GPIOG->AFRH |= (0x3 << 13);


	//UART4章节 8N1 115200对应位使能
	//1.判断UE是否使能,如果等于1,禁止
	if (USART4->CR1 & 0x1)	//设置UE位不使能,否则其他位无法设置
	{
		delay_ms(500);
		USART4->CR1 &= (~(0x1 << 0));
	}
	//2.设置8N1 无校验位
	USART4->CR1 &= (~(0x1 << 28));	//CR1[28][12]=00 8位数据位
	USART4->CR1 &= (~(0x1 << 12));
	USART4->CR2 &= (~(0x3 << 12));	//设置一位停止位
	USART4->CR1 &= (~(0x1 << 10));	//设置无校验位
	//3.设置16倍采样率
	USART4->CR1 &= (~(0x1 << 15));
	//4.设置串口不分频
	USART4->PRESC &= (~(0xf << 0));
	//5.设置串口波特率115200
	USART4->BRR |= 0x22b;
	//6.设置串口发送位使能
	USART4->CR1 |= (0x1 << 3);
	//7.设置串口接收位使能
	USART4->CR1 |= (0x1 << 2);
	//8.设置串口使能
	USART4->CR1 |= (0x1 << 0);	//最后设置UE使能	
}

//发送一个字符
void hal_put_char(const char str)
{
	//判断发送数据寄存器是否为空 ISR[7]
	//读0:发送数据寄存器满,需要等待
	//读1:发送数据寄存器空,发送下一字节
	while (!(USART4->ISR & (0x1 << 7)));

	//发送数据寄存器 = str 
	USART4->TDR = str;
	
	//判断发送数据寄存器是否完成
	while (!(USART4->ISR & (0x1 << 6)));
}

//发送一个字符串
void hal_put_string(const char *string)
{
	//判断是否为\0
	//一个一个字符发送
	while (*string)
	{
		hal_put_char(*string++);
	}
	hal_put_char('\n');
	hal_put_char('\r');
}

//接收一个字符
char hal_get_char()
{
	//定一个变量,用来接收数据
	char ch;

	//判断接收数据寄存器是否有数据
	while (!(USART4->ISR & (0x1 << 5)));

	//ch = 接收数据寄存器
	ch = USART4->RDR;
	return ch;
}

char buffer[32]={};
//接收一个字符串
char *hal_get_string()
{
	//for循环
	//判断键盘回车键是否按下 \r
	unsigned int i = 0;
	for (i=0; i<31; i++)
	{
		//接收一个字符,放入buffer
		buffer[i] = hal_get_char();

		//回显到串口工具,发送一个字符
		hal_put_char(buffer[i]);
		if (buffer[i] == '\r')
			break;
	}
	buffer[i] = '\0';
	hal_put_char('\n');

	return buffer;
}

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

#include "uart4.h"

extern void printf(const char* fmt, ...);
void delay_ms(int ms)
{
	int i;
	for (i=0; i<ms; i++)
		for (int j=0; j<1800; j++);
}


int main(int argc, char *argv[])
{
	hal_uart4_init();

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

	return 0;

}

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

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

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

相关文章

  • 2023.07.29 驱动开发DAY6

    通过epoll实现一个并发服务器 服务器 客户端 运行结果  

    2024年02月15日
    浏览(43)
  • C++ DAY6

    又叫钻石继承,由公共子类派生出多个中间子类,又由多个中间子类派生出汇聚子类, 汇聚子类 会 从 中间子类 得到从 公共基类 继承下来的多个成员。 由于汇聚子类会得到中间子类从公共基类继承下来的多份基类成员,故引出了虚继承的概念 为了使汇聚子类只保存一份中

    2024年02月11日
    浏览(31)
  • QT day6

    目录 思维导图 学生管理系统 ui界面 头文件 源文件

    2024年01月15日
    浏览(33)
  • Day6 Qt

    思维导图 1.数据库增删改查 头文件widget.h 2.widget.cpp 视频处理 头文件

    2024年01月16日
    浏览(38)
  • 作业day6

    数据库 sqlite3 sq.db 如果sq.db存在则直接打开sq.db数据库,如果不存在则先创建再打开; ​ 系统命令 需要以 . 开头,不需要以 ; 结尾 .quit 退出数据库 .exit 退出数据库 .help 显示帮助信息,获取所有系统命令; ​ .table 查看当前数据库下的所有表格; .schema 查看表的结构 创建表格c

    2024年02月20日
    浏览(40)
  • 洛谷100题DAY6

    法一: 法二: 使用find函数,其是指向搜索范围内第一个元素 约数个数 = 将约数拆解成每个质因子乘积的形式,每次将质因子出现的个数+1后相乘得到约数个数,普通一次一次模板计算会有超时现象 AC写法:  每次到自己就将自己可以贡献的所有约数个数不断加起来 法一:

    2024年02月07日
    浏览(38)
  • 数据结构 day6

    1-xmind 2-递归实现程序:输入一个数,输出该数的每一位

    2024年02月10日
    浏览(38)
  • 网络编程Day6

    网络聊天室 服务器 客户端

    2024年01月22日
    浏览(40)
  • DAY6之哈希基础

    首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。 哈希表是根据关键码的值而直接进行访问的数据结构。 这么这官方的解释可能有点懵,其实直白来讲其实数组就是一张哈希表。 哈

    2024年02月19日
    浏览(24)
  • Python版Day6

    454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 = i, j, k, l n nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/4sum-ii 著作权归领扣网络所有。商业转载请联系官方

    2024年02月07日
    浏览(17)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包