国庆3uart4

UART.H

#ifndef __UART4_H__                 
#define __UART4_H__                 
#include "stm32mp1xx_uart.h"        
#include "stm32mp1xx_gpio.h"        
#include "stm32mp1xx_rcc.h"         
                                                                                                           
void uart4_init();                  
                                    
void put_char(const char str);      
                                    
char get_char();                    
                                    
void put_string(const char* str);   
                                    
char* get_string();         

UART.C

#include "uart4.h"

extern void delay_ms(int ms);
void uart4_init()
{
    //RCC章节
    RCC->MP_AHB4ENSETR |=(0X1)<<1;
    RCC->MP_AHB4ENSETR |=(0X1)<<6;

    RCC->MP_APB1ENSETR |=(0X1)<<16;

    //GPIO章节
    GPIOB->MODER &=(~(0X3<<4));
    GPIOB->MODER |=(0X1)<<5;

    GPIOG->MODER &=(~(0X3<<22));
    GPIOG->MODER |=(0X1)<<23;

    GPIOB->AFRL &=(~(0XF<<8));
    GPIOB->AFRL |=(0X1)<<11;

    GPIOG->AFRH &=(~(0XF<<12));
    GPIOG->AFRH |=(0X3)<<13;

    //UART章节
    if(USART4->CR1 &(0X1<<0))
    {
        delay_ms(500);
        USART4->CR1 &=(~(0X1<<0));
    }
    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->CR2 &=(~(0X3<<12));

    USART4->BRR =0X22B;

    USART4->PRESC &=(~(0XF<<0));

    USART4->CR1 |=(0X1)<<0;

}
                                                          
void put_char(const char str)
{
    while(!(USART4->ISR&(0X1<<7)));

    USART4->TDR=str;
    if(str=='\r')
    {
        put_char(str);
    }
}

char get_char()
{
    char ch;


    while(!(USART4->ISR&(0X1<<5)));

    ch=USART4->RDR;
    return ch;

}

void put_string(const char* str)
{
    while(*str!='\0')
    {
        put_char(*str);
        str++;
    }
    put_char('\n');
    put_char('\r');

}
char buffer[50]={0};
char* get_string()
{
    int i=0;
    while((buffer[i]=get_char())!='\r')
    {
        put_char(buffer[i]);
        i++;
    }
    buffer[i]='\0';
    put_char('\n')
    return buffer;

}

MAIN.C

#include "uart4.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()
{
    char* c;

    uart4_init();
    while(1)
    {
     /* c= get_char();
      put_char(c+1);*/
      c=get_string();
      put_string(c);                           
    }
    return 0;
}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值