1.实验串口收发一个字符2.实验串口收发一个字符串

该代码段展示了STM32微控制器中对UART4和GPIO接口的初始化过程,包括RCC时钟设置、GPIO模式和复用功能配置,以及UART的控制寄存器设定。此外,还包括了发送和接收字符及字符串的函数,用于串行通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能文件

#include"gpio.h"


//初始化
void uart()
{
    //rcc章节
    RCC->MP_AHB4ENSETR|=((0x1<<1));
    RCC->MP_AHB4ENSETR|=((0x1<<6));
    RCC->MP_APB1ENSETR|=((0x1<<16));
    
    //gpio章节
    //MODER寄存器
    GPIOG->MODER&=(~(0x3<<22));
    GPIOG->MODER|=(0x1<<23);
    GPIOB->MODER&=(~(0x3<<4));
    GPIOB->MODER|=(0x1<<5);
    //AFRL和AFRH寄存器
    GPIOG->AFRH&=(~(0xf<<12));
    GPIOG->AFRH|=(0x3<<13);
    GPIOB->AFRL&=(~(0xf<<8));
    GPIOB->AFRL|=(0x1<<11);
    
    //uart章节
    //CR1寄存器
    USART4->CR1&=(~(0x1<<12));
    USART4->CR1&=(~(0x1<<28));
    USART4->CR1&=(~(0x1<<15));
    USART4->CR1&=(~(0x1<<10));
    USART4->CR1|=(0x1<<3);
    USART4->CR1|=(0x1<<2);
    USART4->CR1|=(0x1);
    //CR2寄存器
    USART4->CR2&=(~(0x1<<12));
    //BRR寄存器
    USART4->BRR=0x22B;
    //PRESC寄存器
    USART4->PRESC&=(~(0x1));
    

    
}

//发送一个字符
void write_char(char str)
{
    while(!(USART4->ISR&0x1<<7));
    USART4->TDR=str;
    while(!(USART4->ISR&0x1<<6));

}

//发送一个字符串
void write_str(const char *str)
{
    while(*str!='\0')
    {
        write_char(*str);
        str++;
    }
}

//接受一个字符
char read_char()
{
    while(!(USART4->ISR&0x1<<5));
    char cha=0;
    cha=USART4->RDR;
    return cha;
}

//接受一个字符串
char buf[512]={0};
char *read_str1()
{
//    int i=0;
//    while((buf[i]=read_char())!='\r')
//        i++;
//    buf[i]='\0';
//    buf[i+1]='\n';
    //buf[0]=read_char();
    int i=0;
    while(1)
    {
    
        buf[i]=read_char();
        if(buf[i] == '\r') break;
        i++;
    }

    buf[i+1]='\n';
    buf[i+2]='\0';
    
    return buf;

}

头文件

#ifndef __GPIO_H__
#define __GPIO_H__

#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_uart.h"

//初始化
void uart();

//发送一个字符
void write_char(char str);

//发送一个字符串
void write_str(const char *str);

//接受一个字符
char read_char();

//接受一个字符串
char *read_str1();



#endif

测试文件

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



int main()
{
    //初始化
    uart();
    while(1)
    {
        write_str(read_str1());

    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值