uart串口

#include "uart4.h"
#include "gpio.h"

//uart4初始化
void hal_uart4_init()
{
    /***********RCC章节初始化************/
    RCC_AHB4_ENSETR |= (0x1 << 1); //GPIOB使能
    RCC_AHB4_ENSETR |= (0x1 << 6); //GPIOG使能
    RCC_APB1_ENSETR |= (0x1 << 16);//UART4使能
    /***********GPIO章节初始化************/
    gpio_init_t initpb2 = {0}; //uart4_rx pb2 
    initpb2.moder = ALT;
    initpb2.afrl = AF8;
    hal_gpio_UART4_init(GPIOB,&initpb2,GPIO_PIN_2);

    gpio_init_t initpg11 = {0}; //uart4_tx pg11
    initpg11.moder = ALT;
    initpg11.afrh = AF6;
    hal_gpio_UART4_init(GPIOG,&initpg11,GPIO_PIN_11);

    /***********UART4章节初始化************/
    USART4->CR1 &= (~(0x1 << 29));
    USART4->CR1 &= (~(0x1));//设置串口不使能

    USART4->CR1 &= (~(0x1 << 28));//设置数据位宽度 8位
    USART4->CR1 &= (~(0x1 << 12));

    USART4->CR1 &= (~(0x1 << 15));//设置串口16倍采样率

    USART4->CR1 &= (~(0x1 << 10));//设置串口无奇偶校验位

    USART4->CR1 &= (~(0x1 << 3));//设置串口发送数据寄存器使能
    USART4->CR1 |= (0x1 << 3);

    USART4->CR1 &= (~(0x1 << 2));//设置串口接收数据寄存器使能
    USART4->CR1 |= (0x1 << 2);

    USART4->CR1 |= (0x1);//设置串口使能

    USART4->CR2 &= (~(0x3 << 12));//设置串口1位停止位

    USART4->PRESC &= (~(0xf)); //不分频
    USART4->BRR &= (~(0xff));//波特率115200  0x22b
    USART4->BRR = 0x22b;

}

//发送一个字符
void put_char(const char str)
{
    while(!(USART4->ISR & (0x1 << 7)));
    USART4->TDR = str;
    if(str == '\n')
        put_char('\r');
}

//发送一个字符串
void put_string(const char* str)
{
    while (*str != '\0')
        put_char(*str++);
    put_char('\n');
    put_char('\r');
    
}

//接收一个字符
char get_char()
{
    char c;
    while (!(USART4->ISR & (0x1 << 5)));
    c = (char)USART4->RDR;      
    return c;
}
char buf[50];
char* get_string()
{
	unsigned int i = 0;
	for(i=0;i<49;i++)
	{
		buf[i] = get_char();
        put_char(buf[i]);
        if(buf[i] == '\r')
            break;
	}
    buf[i] = '\0';
    put_char('\n');
    return buf;
}

运行结果
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值