stm32mp157学习记录 uart开发

unsigned char get_a_byte()

{

    unsigned char c;

    while(!(USART4->ISR & (0X1 << 5)));            // 判断RXFIFO中数据是否被接收

    c = USART4->RDR;                               // 接收数据

    return c;

}

void send_a_byte(const char data)

{

    while(!(USART4->ISR & (0X1 << 7)));            // 判断TXFIFO是否为满

    USART4->TDR = data;                            // 发送数据

    if (data == '\n')

        putc('\r');

    while(!(USART4->ISR & (0X1 << 6)));           // 判断是否发送完成

}

void send_string(const  char  *pstr)

{

    while(*pstr != '\0')

        putc(*pstr++);

}

void uart_init()

{

    GPIOG->MODER &= ~(0x3 << 22);

    GPIOG->MODER |= 0x2 << 22;      //PG11    设置为复用功能

    GPIOG->AFRH &= ~(0xf << 12);

    GPIOG->AFRH |= 0x6 << 12;        //复用功能选择用于UART4_TX

    GPIOB->MODER &= ~(0x3 << 4);

    GPIOB->MODER |= 0x2 << 4;        //PB2      设置为复用功能

    GPIOB->AFRL &= ~(0xf << 8);

    GPIOB->AFRL |= 0x8 << 8;          //复用功能选择用于UART4_RX

    USART4->CR1 &= (~(0x1 << 28) | ~(0x1 << 12));                 //设置1 Start bit,8 Data bits,

    USART4->CR1 &= (~(0x1 << 15));                                 // 采样率为16位

//这里使用内部默认时钟   频率为64MHZ

    USART4->PRESC &= ~0xf;            //预分频寄存器   不分频

    USART4->BRR |= 0x22b;  //64000000/115200 = 0x22b   //波特率为115200

//  Example 1

// To obtain 9600 baud with usart_ker_ck_pres= 8 MHz:

// • In case of oversampling by 16:

// USARTDIV = 8 000 000/9600

// BRR = USARTDIV = 833d = 0341h

    USART4->CR2 &= ~(0x3 << 12);         //设置 1 stop bit


 

    USART4->CR1 |= (0x1 << 0);               //USART使能

    USART4->CR1 |= (0x3 << 2);               // TXD与RXD使能,可以接收与发送数据

}

可以对照着资料去翻寄存器学习

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值