1.在键盘输入一个字符,字符+1,并且打印在串口工具上
头文件:uart.h
#ifndef __UART4_H__
#define __UART4_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_uart.h"
//UART4串口初始化
void hal_uart_init(void);
//发送一个字符
void hal_put(const char str);
//发送一个字符串
void hal_put_string(const char* string);
//接收一个字符
char get_char(void);
//接受一个字符串
char* get_string(void);
#endif
功能代码:uart.c
#include "uart4.h"
//UART4串口初始化
void hal_uart_init(void)
{
/*********RCC相关寄存器***********/
//使能GPIOB这一组控制器
RCC->MP_AHB4ENSETR |= (0x1 << 1);
//使能GPIOG这一组控制器
RCC->MP_AHB4ENSETR |= (0x1 << 6);
//使能UART4控制器
RCC->MP_AHB4ENSETR |= (0x1 << 16);
/*********GPIO相关寄存器***********/
//设置PB2引脚为复用功能模式
GPIOB->MODER &=(~(0x3 << 4));
GPIOB->MODER |=(0x1 << 5);
//设置PG11引脚为复用功能模式
GPIOG->MODER &=(~(0x3 << 22));
GPIOG->MODER |=(0x1 << 23);
//设置PB2引脚为复用功能模式为UART4_RX
GPIOB->AFRL &=(~(0xf << 8));
GPIOB->AFRL |=(0x1 << 11);
//设置PG11引脚为复用功能模式为UART4_TX
GPIOG->AFRH &=(~(0xf << 12));
GPIOG->AFRH |=(0x6 << 12);
/*********UART4相关寄存器***********/
//初始化UART4相关内容
/* if(USART4->CR1 & (0x1 << 0))
{
USART4->CR1 &=(~(0x1 << 0));
}*/
//设置串口配置信息:115200 8N1
USART4->CR1 &=(~(0x1 << 28));
USART4->CR1 &=(~(0x1 << 12));
USART4->CR1 &=(~(0x1 << 10));
USART4->CR2 &=(~(0x3 << 12));
USART4->CR1 &=(~(0x1 << 15));
USART4->PRESC &=(~(0xf << 0));
USART4->BRR =(0x022b);
//串口发送数据寄存器是如何进行数据发送
USART4->CR1 |=(0x1 << 3);
//串口接收数据寄存器是如何接收数据
USART4->CR1 |=(0x1 << 2);
USART4->CR1 |=(0x1);
}
//发送一个字符
void hal_put(const char str)
{
//判断发送数据寄存器是否有数据
while(!(USART4->ISR & (0x1 << 7)));
//判断发送寄存器是否发送完成
USART4->TDR =str;
while(!(USART4->ISR & (0x1 << 6)));
if(str=='\n')
{
hal_put('\r');
}
}
//发送一个字符串
void hal_put_string(const char* string)
{
//判断字符串结束标志
while(*string!='\0')
{
hal_put(*string);
string++;
}
}
//接收一个字符
char get_char(void)
{
char str;
while(!(USART4->ISR & (0x1 << 5)));
str=(char)USART4->RDR;
return str;
}
char str[128];
//接受一个字符串
char *get_string(void)
{
//键盘的回车键按下,对应的字符'\r'
int i=0;
do
{
str[i]=get_char();
hal_put(str[i]);
i++;
}while(str[i-1]!='\r' && i<127);
str[i]='\0';
return str;
}
主函数:main.c
#include "uart4.h"
int main()
{
hal_uart_init();
char a;
while(1)
{
a = get_char();
hal_put(a+1);
}
return 0;
}
现象:
2.串口工具输入一个字符串,按下回车键,会显示输入的字符串
主函数: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()
{
hal_uart_init();
hal_put_string("usart4 test!!!!\n");
while(1)
{
// hal_put_char(get_char()+1);
hal_put_string(get_string());
}
return 0;
}
现象: