建设部网站刘赵云,兰州网站关键字优化,企业网站认证,视频网站建设技术方案书作业:完成cortex-A7核UART总线实验
目的#xff1a;1.输入a,显示b#xff0c;将输入的字符的ASCII码下一位字符输出 2.原样输出输入的字符串
源码#xff1a;
uart4.h
#ifndef __UART4_H__
#define __UART4_H__#include stm32mp1xx_rcc.h
#incl…作业:完成cortex-A7核UART总线实验
目的1.输入a,显示b将输入的字符的ASCII码下一位字符输出 2.原样输出输入的字符串
源码
uart4.h
#ifndef __UART4_H__
#define __UART4_H__#include stm32mp1xx_rcc.h
#include stm32mp1xx_gpio.h
#include stm32mp1xx_uart.h//RCC/GPIO/UART4章节初始化
void hal_uart4_init();//发送一个字符函数
void hal_put_char(const char str);//发送一个字符串函数
void hal_put_string(const char* string);//接收一个字符函数
char hal_get_char();//接收一个字符串函数
char *hal_get_string();#endifuart4.c
#include uart4.h//RCC/GPIO/UART4章节初始化
void hal_uart4_init(){//RCC章节初始化//1.使能GPIOB组控制器RCC-MP_AHB4ENSETR | (0X1 1);//2.使能GPIOG组控制器RCC-MP_AHB4ENSETR | (0x1 6);//3.使能UART4组控制器RCC-MP_APB1ENSETR | (0x1 16);//GPIO章节初始化//1.设置PB2引脚为复用功能GPIOB-MODER (~(0X3 4));GPIOB-MODER | (0x1 5);//2.设置PB2引脚复用功能为UART4_RX AFRL[11:8] 1000GPIOB-AFRL (~(0xf 8));GPIOB-AFRL | (0x1 11);//1.设置PG11引脚为复用功能 MODER[23:22] 10GPIOG-MODER (~(0X3 22));GPIOG-MODER | (0x1 23);//2.设置PG11引脚复用功能为UART4_TX AFRH[15:12] 0110GPIOG-AFRH (~(0xf 12));GPIOG-AFRH | (0X3 13);//UART4章节初始化//8N1 115200 使能//0.设置UE0USART4-CR1 (~0X1);//1.设置UART4串口1位起始位8位数据位 CR1[28][12] 00USART4-CR1 (~(0X1 12));USART4-CR1 (~(0X1 28));//2.设置UART4串口没有校验位 CR1[10] 0USART4-CR1 (~(0X1 10));//3.设置UART4串口1位停止位 CR2[13:12] 00USART4-CR2 (~(0X3 12));//4.设置UART4串口16倍采样率 CR1[15] 0USART4-CR1 (~(0x1 15));//5.设置UART4串口不分频 PRESC[3:0] 0000USART4-PRESC (~0xf);//6.设置UART4串口波特率为 115200 BRR 0x22B//BRR 64000000 / 115200USART4-BRR 0x22B;//7.设置UART4串口发送器使能 CR1[3] 1USART4-CR1 | (0x1 3);//8.设置UART4串口接收器使能 CR1[2] 1USART4-CR1 | (0X1 2);//9.设置UART4串口使能 CR1[0] 1 UE1USART4-CR1 | 0X1;
}//接收一个字符函数
char hal_get_char(){//判断接收数据寄存器中是否接收到数据while(!(USART4-ISR (0X1 5)));//将接收数据寄存器中的内容读出来char ch USART4-RDR;return ch;
}char buf[128] ;
//接收一个字符串函数
char *hal_get_string(){//循环//enter rint i 0;for(i 0; i 128; i){buf[i] hal_get_char();hal_put_char(buf[i]);if(buf[i] \r){break;}}buf[i] \0;hal_put_char(\n);return buf;
}//发送一个字符函数
void hal_put_char(const char str){//1.判断发送数据寄存器是否为空 ISR[7]//读0发送数据寄存器满需要等待//读1发送数据寄存器为空可以发送数据while(!(USART4-ISR (0x1 7)));//2.将要发送的数据赋值给发送数据寄存器中USART4-TDR str;//判断一帧数据是否发送完成while(!(USART4-ISR (0x1 6)));
}//发送一个字符串函数
void hal_put_string(const char *string){//判断是否为\0//一个一个字符进行发送就可以while(*string){hal_put_char(*string);}
}main.c
#include uart4.hextern 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()
{while(1){//hal_put_char(hal_get_char() 1); //输出字符的ASCII码后一个字符hal_put_string(hal_get_string()); //输出原样字符串}return 0;
}结果1 结果2