2024-4-15-ARM作业

实现字符串数据收发函数的封装

源代码:

main.c

复制代码
#include "gpio.h"

#include "uart4.h"



int main()

{

	uart4_config();

	while (1)

	{

		// char a=getchar();

		// putchar(a+1);

		char s[20];

		gets(s);

		puts(s);

		//putchar('\n');

		putchar('\r');



	}



	return 0;

}

uart4.c

复制代码
#include "uart4.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_uart.h"
#include "stm32mp1xx_rcc.h"

void uart4_config()
{
    //使能
    RCC->MP_AHB4ENSETR |= (0x1 << 1);
    RCC->MP_AHB4ENSETR |= (0x1 << 6);
    RCC->MP_APB1ENSETR |= (0x1 << 16);

    //PB2管脚复用
    GPIOB->MODER &= (~(0x3 << 4));
    GPIOB->MODER |= (0x2 << 4);

    //PG11管脚复用
    GPIOG->MODER &= (~(0x3 << 22));
    GPIOG->MODER |= (0x2 << 22);
    // PG11 为 UART4_TX
    GPIOG->AFRH &= (~(0xF << 12));
    GPIOG->AFRH |= (0x6 << 12);
    // PB2 为 UART4_RX
    GPIOB->AFRH &= (~(0xF << 8));
    GPIOB->AFRH |= (0x8 << 8);
    //设置串口不使能
    USART4->CR1 &= (~0x1);
    //设置8位数据位
    USART4->CR1 &= (~(0x1 << 12));
    USART4->CR1 &= (~(0x1 << 28));
    //设置没有校验位
    USART4->CR1 &= (~(0x1 << 10));
    //设置时钟频率不分频
    USART4->PRESC &= (~0xf);
    //设置16倍过采样
    USART4->CR1 &= (~(0x1 << 15));
    //设置1位停止位
    USART4->CR2 &= (~(0x3 << 12));
    //设置波特率115200
    USART4->BRR = 0x22B;
    //使能发送器
    USART4->CR1 |= (0x1 << 3);
    //使能接收器
    USART4->CR1 |= (0x1 << 2);
    //使能串口
    USART4->CR1 |= (0x1 << 0);
}

void putchar(char dat)
{
    while (!(USART4->ISR & (0x1 << 7)))
        ;
    USART4->TDR = dat;
    //等待传输完成
    while (!(USART4->ISR & (0x1 << 6)))
        ;
}
char getchar()
{

    while (!(USART4->ISR & (0x1 << 5)))
        ;
    return USART4->RDR;
}
void puts(char *s)
{
    while (1)
    {
        if (*s == '\0')
            break;
        putchar(*s);
        s++;
    }
    putchar('\n');
    putchar('\r');
}
void gets(char *s)
{
    while (1)
    {
        *s = getchar();
        putchar(*s);
        if ((*s) == '\r')
            break;
        s++;
    }
    *s = '\0';
    putchar('\n');
}

实现效果:

相关推荐
码上上岸2 小时前
基于单片机的老人跌倒监测报警器设计与实现
stm32·嵌入式硬件·物联网·智能硬件·硬件
恒锐丰科技林技术员2 小时前
SS6209 半桥驱动器:小型半桥电源方案的优选器件
经验分享·嵌入式硬件
别催小唐敲代码5 小时前
Pixhawk 6C — Mission Planner 烧录 & 全套校准教程
stm32·单片机·嵌入式硬件
wuyk5556 小时前
从零吃透Modbus通信|第7章:终极工程整合(模块化架构、双模式主机从机、RTOS适配、量产级模板)
c语言·stm32·学习·架构
Freak嵌入式6 小时前
Pico UART 数据收发实战:硬件配置、MicroPython 编程
java·开发语言·单片机·嵌入式硬件·生活
一条破秋裤7 小时前
STM32 学习笔记:PWM 驱动 LED 呼吸灯与舵机代码
笔记·stm32·学习
ARM|X86+FPGA工业主板厂家7 小时前
基于嵌入式 GPU 的智能服务机器人
linux·运维·arm开发·fpga开发·机器人
Freak嵌入式8 小时前
Pico PIO 汇编语法深度详解:标识符、指令、伪指令全解析
汇编·stm32·单片机·嵌入式硬件·fpga开发·硬件架构
自小吃多9 小时前
PCB Editor软件差分对添加与设置笔记
笔记·嵌入式硬件
智购科技无人售货机厂家11 小时前
2026自动售货机连接器选型指南:从IP等级到插拔寿命的工程实践~YH
单片机·嵌入式硬件