UART学习

uart.c

cpp 复制代码
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
// UART4_TX : PG11  AF6
// UART4_RX : PB2   AF8
void __uart_init()
{
   	// GPIOB2 设置为复用功能
   	GPIOB->MODER &= (~(0x3 << 4));
   	GPIOB->MODER |= (0x2 << 4);
	GPIOB->AFRL &= (~(0xF << 8));
	GPIOB->AFRL |= (0x8 << 8);
	// GPIOG11 设置为复用功能 
	GPIOG->MODER &= (~(0x3 << 22));
	GPIOG->MODER |= (0x2 << 4);
	GPIOG->AFRH &= (~(0xF << 12));
	GPIOG->AFRH |= (0x6 << 12);
	// 设置数据长度为8位   USART_CR1  
	USART4->CR1 &= (~(0x1 << 28));
	USART4->CR1 &= (~(0x1 << 12));
	// 采样率为16位 
	USART4->CR1 &= (~(0x1 << 15));
	// 设置波特率为115200bps 
	USART4->PRESC &= (~(0xF << 0));
	USART4->BRR = 0xD0;
	// 停止位1位
	USART4->CR2 &= (~(0x3 << 12));
	// 使能USART串口 
	USART4->CR1 |= (0x1 << 0);
	// 使能USART的发送或者接收功能 
	USART4->CR1 |= (0x1 << 3);
	USART4->CR1 |= (0x1 << 2);

}

void __uart_putc(const char data)
{
	while (!(USART4->ISR & (0x1 << 7)));
	USART4->TDR = data;
	if (data == '\n')
		__uart_putc('\r');
}
void __uart_puts(const  char  *pstr)
{
	while(*pstr != '\0')
		__uart_putc(*pstr++);
}

char __uart_getc(void)
{
	char ch;
	while(!(USART4->ISR & (0x1 << 5)));
	ch = (char)USART4->RDR;
	return ch;
}

uart.h

cpp 复制代码
#ifndef __UART_H__
#define __UART_H__

void __uart_init();

void __uart_putc(const char data);

void __uart_puts(const  char  *pstr);

char __uart_getc(void);

#endif

mian,c

cpp 复制代码
main()
{
    //1.串口的初始化
    __uart_init();
    char r,t;

    while(1)
    {
    //2.接收一个字节数据
    r = __uart_getc();
    printf("%c\n",r);
    //3/发送一个字节数据
    printf("请输入:\n");
    scanf("%c",&t);
    __uart_putc(t);
    }
}
相关推荐
zlinear数据采集卡13 小时前
从协议解析到波形实时显示:硬核拆解ZLinear采集卡上位机软件的开发架构
arm开发·单片机·嵌入式硬件·fpga开发·架构·开源
奔跑的架构师15 小时前
[A-48]ARMv9/v8-电源状态管理机制(PSCI协调机制)
android·linux·arm开发·arm
想你依然心痛15 小时前
RT-Thread组件生态:SAL网络框架与AT组件实战——网络抽象、AT指令
网络·arm开发·at·sal
secondyoung1 天前
Cortex-R52学习:存储系统
arm开发·单片机·学习·arm
c++之路1 天前
C++跨平台(九):跨平台字节序统一处理
开发语言·arm开发·c++
AndyHeee19 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
暮云星影19 天前
瑞芯微rk3588利用Rockchip NPU运行大语言模型(LLM)
arm开发·人工智能·语言模型·自然语言处理
techdashen19 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust
振南的单片机世界19 天前
ARM中断比51快在哪?硬件压栈+NVIC集中管理
arm开发·stm32·单片机·嵌入式硬件
墨绿色的摆渡人19 天前
论文笔记(一百三十七)Learning Dual-Arm Push and Grasp Synergy in Dense Clutter
arm开发·论文阅读