#include "uart4.h"
void hal_uart4_init()
{
//使能GPIOB组寄存器
RCC->MP_AHB4ENSETR |= (0x1 << 1);
//使能GPIOG组寄存器
RCC->MP_AHB4ENSETR |= (0x1 << 6);
//使能UART4组寄存器
RCC->MP_APB1ENSETR |= (0x1 << 16);
//设置PB2复用功能为UART4_RX
GPIOB->MODER &= (~(0x3 << 4));
GPIOB->MODER |= (0x1 << 5);
GPIOB->AFRL &= (~(0xF << 8));
GPIOB->AFRL |= (0x1 << 11);
//PG11设置为复用功能为UART4_TX
GPIOG->MODER &= (~(0x3 << 22));
GPIOG->MODER |= (0x1 << 23);
GPIOG->AFRH &= (~(0xF << 12));
GPIOG->AFRH |= (0x6 << 12);
USART4->CR1 &= (~(0x1 << 28)); //设置8位数据位
USART4->CR1 &= (~(0x1 << 12)); //设置8位数据位
USART4->CR1 &= (~(0x1 << 15)); //设置16倍采样率
USART4->CR1 &= (~(0x1 << 10)); //设置无校验位
//设置发送位使能 设置接收位使能 设置串口使能
USART4->CR1 &= (~(0xF));
USART4->CR1 |= (0xD);
USART4->CR2 &= (~(0x3 << 12)); // 设置串口1位停止位
USART4->PRESC &= (~(0xF)); //设置串口不分频
//设置串口波特率
USART4->BRR &= (~(0xFFFF));
USART4->BRR |= (0x22B);
}
void hal_put_char(const char str)
{
USART4->TDR = (int)str;
printf("%s",str);
}
void hal_put_string(const char* string)
{
for(int i=0; i<sizeof(string); i++)
{
USART4->TDR = (int)string[i];
}
}
char hal_get_char()
{
char a;
a = USART4->RDR;
return a;
}
char* hal_get_string()
{
char a[10];
a[1] = USART4->RDR;
return a;
}
7.1作业
最新推荐文章于 2024-07-10 06:26:04 发布