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);
    }
}
相关推荐
DisonTangor4 小时前
微软的新模拟器将为 Windows on Arm 带来更多游戏
arm开发·游戏·microsoft
TeYiToKu1 天前
笔记整理—linux驱动开发部分(9)framebuffer驱动框架
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件·arm
w微信150135078122 天前
小华一级 代理商 HC32F005C6PA-TSSOP20 HC32F005系列
c语言·arm开发·单片机·嵌入式硬件
憧憬一下2 天前
Pinctrl子系统中Pincontroller和client驱动程序的编写
arm开发·嵌入式·c/c++·linux驱动开发
上海知从科技2 天前
知从科技受邀出席ARM日产技术日
arm开发·科技
极客小张3 天前
基于STM32的智能温室环境监测与控制系统设计(代码示例)
c语言·arm开发·stm32·单片机·嵌入式硬件·物联网·毕业设计
TeYiToKu4 天前
笔记整理—linux驱动开发部分(6)platform平台总线
linux·c语言·arm开发·驱动开发·笔记·嵌入式硬件
飞腾开发者4 天前
飞腾平台Arm ComputeLibrary编译安装指南
linux·服务器·arm开发·后端·性能优化
CodingCos4 天前
【ARM Linux 系统稳定性分析入门及渐进 1.1 -- Crash 工具功能概述】
linux·arm开发·crash tools·linux crash·crash 工具使用
@haihi6 天前
IIC和SPI的区别和相同之处
arm开发·stm32·mcu