
uart4.h
- #ifndef __UART4_H__
- #define __UART4_H__
-
- #include"stm32mp1xx_gpio.h"
- #include"stm32mp1xx_uart.h"
- #include"stm32mp1xx_rcc.h"
-
-
- //UART串口初始化
- 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
uart4.c
- #include "uart4.h"
-
- //UART4串口初始化
- void hal_uart_init(void)
- {
- //RCC相关寄存器初始化
- RCC->MP_AHB4ENSETR |=(0x1<<1);
- RCC->MP_AHB4ENSETR |=(0x1<<6);
- RCC->MP_APB1ENSETR|=(0x1<<16);
- //GPIO相关寄存器初始化
- GPIOG->MODER &=(~(0x3<<4));
- GPIOG->MODER |=(0x1<<5);
- GPIOB->AFRL &=(~(0xF<<8));
- GPIOB->AFRL |=(0x1<<11);
-
- GPIOB->MODER &=(~(0x3<<22));
- GPIOB->MODER |=(0x1<<23);
- GPIOG->AFRH &=(~(0xF<<12));
- GPIOG->AFRH |=(0x3<<13);
-
-
-
-
- USART4->CR1 &=(~(0x1 << 0));
-
- USART4->CR1 &=(~(0x1<<12));
- USART4->CR1 &=(~(0x1<<28));
- USART4->CR1 &=(~(0x1<<10));
-
- USART4->CR2 &=(~(0x3<<12));
-
- USART4->CR1 &=(~(0x1<<15));
-
- USART4->PRESC &=(~(0xf<<4));
-
- USART4 ->BRR =0x22b;
-
- USART4->CR1 &=(~(0x3 << 2));
- USART4->CR1 |=(0x3 << 2);
-
- USART4->CR1 |=(0x1<<0);
-
-
-
- }
-
- //发送一个字符
- void hal_put(const char str)
- {
- //判断发送数据寄存器是否有有数据
- while(!(USART4->ISR & (0x1 << 7)));
-
- //当发射器为空时才可以发送下一个字符,否则要等待
-
-
-
- //清空
- USART4->TDR &= (~(0xff <<0));
- USART4->TDR = str;
- while(!(USART4->ISR & (0x1 <<6)));
- //判断数据是否发送完成
-
- //判断发送数据寄存器是否发送完成
- }
- //发送一个字符串
- void hal_put_string(const char* string)
- {
- //判断字符结束标志
- while(*string)
- {
- hal_put(*string++);
- }
- hal_put('\n');
- hal_put('\r');
- }
- //接受一个字符
- char get_char(void)
- {
- //判断接受数据寄存器是否接收到数据
- char ch=0;
- while(!(USART4->ISR & (0x1 <<5)));
-
-
- ch=USART4->RDR;
- return ch;
- }
- //接收一个字符串
- char string[50] = {0};
- char* get_string(void)
- {
- //键盘的回车建按下,对应的字符'\r'
- int i=0;
- while((string[i] = get_char()) != '\r')
- {
- hal_put(string[i]);
- i++;
- }
- string[i]='\0';
- hal_put('\n');
- hal_put('\r');
- return string;
- }
main.c
- #include "uart4.h"
-
- #include"stm32mp1xx_gpio.h"
-
- #include"stm32mp1xx_uart.h"
-
- #include"stm32mp1xx_rcc.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("uart4 test !!!!");
-
- while(1)
-
- {
-
- //hal_put_string(get_string());
-
- hal_put(get_char()+1);
-
- }
-
-
-
- return 0;
-
- }