实验1
1.在键盘输入一个字符,串口工具进行显示
2.例如:在在键盘输入一个字符’a’,串口工具进行显示’b’
实验2
1.在键盘输入一个字符串,串口工具进行显示
2.例如:在在键盘输入一个字符串“huyue”,串口工具进行显示“huyue”
include/uart4.h
#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);
//接收一个字符
char hal_get_char();
//发送一个字符串
void hal_put_string(const char *string);
//接收一个字符串
char *hal_get_string();
#endif
src/uart4.c
#include "uart4.h"
//初始化相关操作
void hal_uart4_init()
{
/*-----RCC初始化-----*/
//使能GPIOB/G
RCC->MP_AHB4ENSETR |= (0X1 MP_AHB4ENSETR |= (0X1 MP_APB1ENSETR |= (0x1 MODER &= (~(0x3 MODER |= (0x1 MODER &= (~(0x3 MODER |= (0x1 AFRL &= (~(0xf AFRL |= (0x1 AFRH &= (~(0xf AFRH |= (0x3 CR1 &= (~(0x1 CR1 &= (~(0x1 CR1 &= (~(0x1 CR1 &= (~(0x1 CR2 &= (~(0x3 BRR &= (~(0xffff));
USART4->BRR |= (0x22b);
//不分频
USART4->PRESC &= (~(0xf));
//发送器使能
USART4->CR1 |= (0x1 CR1 |= (0x1 CR1 |= (0x1);
}
//发送一个字符
void hal_put_char(const char str)
{
//判断发送数据寄存器是否为空
while(!(USART4->ISR & (0x1 TDR = str;
//判断发送是否完成
while(!(USART4->ISR & (0x1 ISR & (0x1 RDR;
hal_put_char(c);
hal_put_char('n');
hal_put_char('r');
return c;
}
//发送一个字符串
void hal_put_string(const char *string)
{
int i = 0;
while(*(string+i) != 0)
{
hal_put_char(*(string+i));
i++;
}
hal_put_char('n');
hal_get_char('r');
}
//接收一个字符串
char *hal_get_string()
{
static char str[512];
int i=0;
while(1)
{
str[i] = hal_get_char();
hal_put_char(str[i]);
if(str[i] == 'r')
{
break;
}
i++;
}
str[i+1] = 0;
hal_put_char('n');
hal_put_char('r');
return str;
}
main.c
#include "uart4.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
int i,j;
for(i = 0; i
运行结果
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
作为开发人员,你对复用这个概念一定不陌生。在开发过程中,我们把系统中通用的代码逻辑抽取出来,变成公共方法或公共类,然后在多个地方调用,这就是最简单的技术上的复用。 但一开始,我们不会过多地考虑复用,当一个新项目过来,我们会选择最直接的方式来实现,结果往往是欲速…