键盘输入一个字符‘a‘,串口工具显示‘b‘

#include "uart4.h"                                            
                                                              
                                                              
//初始化相关操作                                              
void hal_uart4_init()                                         
{                                                             
                                                              
//**********RCC章节的初始化***********//                      
//1.使能GPIOB MP_AHB4ENSETR[1] =1                             
    RCC->MP_AHB4ENSETR |= (0x1 << 1);                         
                                                              
    //2.使能GPIOG MP_AHB4ENSETR[6]=1                          
    RCC->MP_AHB4ENSETR |= (0x1 << 6);                         
                                                              
    //3.使能UART4 MP_APB1ENSETR[16] =1                        
    RCC->MP_APB1ENSETR |= (0x1 << 16);                        
                                                              
                                                              
//***********GPIO章节的初始化************//                   
    //1.GPIOB_MODER设置为复用功能模式                         
    //GPIOB->MODER[5:4]=10                                    
    GPIOB->MODER &= (~(0x3) << 4);                            
    GPIOB->MODER |= (0x1 << 5);                               
                                                              
    //2.设置PB2引脚功能为UART4_RX                             
    //GPIOB->AFRH[11:8]=1000                                  
    GPIOB->AFRH &= (~(0xf << 8));                             
    GPIOB->AFRH |= (~(0x1 << 11));                            
                                                              
    //1.GPIOG_MODER设置为复用功能模式                         
    //GPIOG->MODER[23:22]=10                                  
    GPIOG->MODER &= (~(0x3) << 4);                            
    GPIOG->MODER |= (0x1 << 5);                               
                                                              
    //2.设置PF11引脚功能为UART4_TX                            
    //GPIOG->AFRL[15:12]=0110                                 
    GPIOB->AFRH &= (~(0xf << 12));                            
    GPIOB->AFRH |= (~(0x3 << 13));                            
                                                              
//***********UART章节的初始化*************//                  
    //1.设置串口 UE=0   USART4->CR1[0] = 0                    
    USART4->CR1 &= (~(0x1));                                  
                                                              
    //2.设置1位起始位,8位数据位: USART4->CR1[12]=0,[28]=0    
    USART4->CR1 &= (~(0x1 << 12));                            
    USART4->CR1 &= (~(0x1 << 28));                            
                                                              
    //3.没有奇偶校验位: USART4->CR1[10]=0                     
    USART4->CR1 &= (~(0x1 << 10));                            
                                                              
    //4.设置1位停止位: USART4->CR2[13:12]=00                  
    USART4->CR2 &= (~(0x3 << 12));                            
                                                              
    //5.设置16倍采样率: USART4->CR1[15]=0                     
    USART4->CR1 &= (~(0x1 <<15));                             
                                                              
    //6.设置串口不分频: USART4->PRESC[3:0]=0                  
    USART4->CR1 &= (~(0xf));                                  
                                                              
    //7.设置串口波特率为115200: USART4->BRR=0x22b             
    USART4->BRR = 0x22b;                                      
                                                              
    //8.设置串口发送器使能: USART4->CR1[3]=1;                 
    USART4->CR1 |= (0x1 << 3);                                
                                                              
    //9.设置串口接收器使能: USART4->CR1[2]=1;                 
    USART4->CR1 |= (0x1 << 2);                                
                                                              
    //10.设置串口使能: UE=1 USART4->CR1[0]=1;                 
    USART4->CR1 |= (0x1);                                     
}                                                             
//发送一个字符                                                
void hal_put_char(const char str)                             
{                                                             
    while(!(USART4->ISR & (0x01 << 7)));                      
    USART4->TDR =str;                                         
                                                              
    while(!(USART4->ISR & (0x01 << 6)));                      
}                                                             
                                                              
//发送一个字符串                                              
void hal_put_string(const char* string)                       
{                                                             
                                                              
}                                                             
                                                              
//接收一个字符                                                
char hal_get_char()                                           
{                                                             
                                                              
    char str1;                                                
    while(!(USART4->ISR & (0x01 <<5)));                       
    str1 = USART4->RDR;                                       
                                                              
    return str1;                                              
                                                              
}                                                             
 

#ifndef __UART4_H__                      
#define __UART4_H__                      
#include "stm32mp1xx_rcc.h"              
#include "stm32mp1xx_gpio.h"             
#include "stm32mp1xx_uart.h"             
//初始化相关操作                         
void hal_uart4_init();                   
                                         
//发送一个字符                           
void hal_put_char(const char str);       
                                         
//发送一个字符串                         
void hal_put_string(const char* string); 
                                         
//接收一个字符                           
char hal_get_char();                                                            
#endif                                   
                                         

#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()
{
    hal_uart4_init();
    hal_put_char('\n');
    hal_put_char('\r');
    while(1)
    {                                           
        hal_put_char(hal_get_char()+1);
    }

    return 0;
}
                                                
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值