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);
    }
}
相关推荐
亿道电子Emdoor1 小时前
【Arm】解决Keil MDK报错提示找不到编译器路径的问题
arm开发
cooldream200911 小时前
RISC-V 全景解析:在 x86 与 ARM 之间,理解开放指令集的真正价值
arm开发·risc-v
切糕师学AI1 天前
ARM 架构中的数据内存屏障指令 DMB
arm开发·架构·指令·内存屏障
森焱森2 天前
GD32F4 DSP
linux·c语言·arm开发·驱动开发·嵌入式硬件
shandianchengzi3 天前
【记录】ARM|Ubuntu 24 快速安装 arm-none-eabi-gdb 及 QEMU 调试实战
linux·arm开发·ubuntu·arm·qemu
切糕师学AI3 天前
ARM 架构中的 PRIMASK、FAULTMAST、BASEPRI 寄存器
arm开发·架构·嵌入式·寄存器
tang_shou3 天前
STM32CubeMx使用STM32F4系列芯片实现串口DMA接收
c语言·arm开发·stm32·单片机·嵌入式硬件·mcu·stm32cubemx
切糕师学AI3 天前
ARM 架构中的数据同步屏障(DSB)是什么?
arm开发·架构·数据同步·屏障
Ivy_belief3 天前
Linux:设置和获取单片机gpio引脚和key值
linux·arm开发·qt·gpio·event事件
徐某人..4 天前
网络编程学习--第一天
arm开发·单片机·学习·arm