arm_uart4实验

cs 复制代码
#include "uart4.h"                       
                                         
//UART                                   
                                         
//初始化                                 
void hal_uart4_init()                    
{                                        
    //rcc_init                           
        //使能GPIOB组控制器[1]=1         
        RCC->MP_AHB4ENSETR |= (0x1 << 1);
        //使能GPIOG组控制器[6]=1         
        RCC->MP_AHB4ENSETR |= (0x1 << 6);
        //使能uart组控制器[16]=1  
        RCC->MP_APB1ENSETR |=(0x1 << 16);       
    //gpio_init  
        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_init
        if(USART4->CR1 & 0x1)
        {
            USART4->CR1 &= (~(0x1 << 0));
        }
        USART4->CR1 &=(~(0x1 << 28));
        USART4->CR1 &=(~(0x1 << 12));
        USART4->CR1 &=(~(0x1 << 15));
        USART4->CR1 &=(~(0x1 << 10));
        USART4->CR1 |=(0x1 << 3);
        USART4->CR1 |=(0x1 << 2) ;
        USART4->CR1 |= 0x1;
        
        USART4->CR2 &=(~(0x1 << 12));
        USART4->PRESC &= (~(0xf<<0));  
        USART4->BRR=0x22b;                    
}                                        
//发送一个字符                           
void hal_put_char(const char str)        
{                                        
     
    while (!(USART4->ISR &(1<<7)));
    USART4->TDR=str;
    if(str=='\n'){
        hal_put_char('\r');
    }
                                    
}                                        
//接受一个字符                           
char hal_get_char()                      
{                                        
      
    char data;
    while(!(USART4->ISR &(1<<5)));
    data=(char)USART4->RDR;
    return data;
                                   
}                                        
//发送一个字符串                         

void hal_put_string(const char* string)  
{                                        
     
    while(*string !='\0'){
        hal_put_string(*string);
        string++;
    }
                                    
}                                        
//接一个字符串                         
char* hal_get_string()                   
{                                        
    int i=0;
    char buff[50];
    for(;i<49;i++){
        buff[i]=hal_get_char();
        hal_put_char(buff[i]);
        if (buff[i] == '\r')
        {
            break;
        }
    }
    buff[i]='\0';
    hal_put_char('\n');
    return buff;
                                   
}                                        
cs 复制代码
#include "uart4.h"

int main()
{
    hal_uart4_init();
    //hal_put_string("uart4 test");
    while(1)
    {
        hal_put_char(hal_get_char()+1);
        //hal_put_string(hal_get_string());
    }
}
cs 复制代码
#ifndef __UART_H__
#define __UART_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
void hal_uart4_init();

void hal_put_char(const char str);

char hal_get_char();

void hal_put_string(const char* string);
char* hal_get_string();
#endif
相关推荐
The️2 分钟前
STM32-FreeRTOS操作系统-事件
arm开发·stm32·单片机·嵌入式硬件·mcu·物联网
yumgpkpm1 小时前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
d111111111d2 小时前
C语言中union(共同体)的特电是什么?STM32中常用于处理什么数据?
c语言·arm开发·笔记·stm32·单片机·嵌入式硬件·学习
切糕师学AI10 小时前
ARM 汇编指令:ORRS
汇编·arm开发
切糕师学AI19 小时前
ARM 汇编指令:STR
汇编·arm开发
ShiMetaPi2 天前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 04 WIFI
网络·arm开发·fpga开发·智能路由器·fpga
切糕师学AI2 天前
ARM 架构中的浮点寄存器(Floating-Point Registers)
arm开发·寄存器·浮点寄存器
再遇当年2 天前
因为研究平台arm,RK3588交叉编译误把我笔记本X86平台的/x86_64-linux-gnu文件删除,导致联想拯救者笔记本中的ubuntu系统损坏
linux·arm开发·ros·gnu·交叉编译·x86
切糕师学AI2 天前
ARM 架构中的 CONTROL 寄存器
arm开发·硬件架构·嵌入式·芯片·寄存器
richxu202510013 天前
嵌入式学习之路>单片机核心原理篇>(14) ARM 架构
arm开发·单片机·学习