25.1.3 UART串口通信

1.FSMP1A开发板进行串口通信实验:

功能:电脑输入LED_ON点亮扩展版LED灯,输入LED_OFF熄灭扩展版LED灯

代码实现:

uart4.c

#include "uart4.h"
//串口初始化
void uart4_init(){
    //使能UART4外设时钟
    RCC->MP_APB1ENSETR |=(0X1<<16);
    //使能GPIOB/GPIOG外设时钟
    RCC->MP_AHB4ENSETR |=(0X1<<1);
    RCC->MP_AHB4ENSETR |=(0X1<<6);
    //设置PB2/PG11复用为UART4功能
    //PB2
    GPIOB->MODER &=(~(0X3<<4));//先清零
    GPIOB->MODER |=(0X2<<4);//设置成复用模式
    GPIOB->AFRL &=(~(0XF<<8));//先清零
    GPIOB->AFRL |=(0X8<<8);//设置成UART4-RX模式
    //PG11
    GPIOG->MODER &=(~(0X3<<22));//先清零
    GPIOG->MODER |=(0X2<<22);//设置成复用模式
    GPIOG->AFRH &=(~(0xF<<12));//先清零
    GPIOG->AFRH |=(0X6<<12);//设置成UART4-TX模式

    //禁用串口UE=0,因为其他相关设置是在UE=0情况下设置的
    USART4->CR1 &=(~(0X1<<0));
    //设置8bit数据位
    USART4->CR1 &=(~(0X1<<12));
    USART4->CR1 &=(~(0X1<<28));
    //设置没有校验位
    USART4->CR1 &=(~(0X1<<10));
    //设置不分频
    USART4->PRESC &=(~(0XF<<0));
    //设置16倍过采样
    USART4->CR1 &=(~(0X1<<15));
    //设置1bit停止位
    USART4->CR2 &=(~(0X3<<12));
    //设置115200波特率
    USART4->BRR=0X22B;
    //使能发送器
    USART4->CR1 |=(0X1<<3);
    //使能接收器
    USART4->CR1 |=(0X1<<2);
    //使能串口
    USART4->CR1 |=0X1;
}

//封装单个字符发送函数
void putchar(char ch){
    //判断发送数据寄存器是否为空,不为空则等待
    while(!(USART4->ISR&(0X1<<7)));
    //为空,向发送数据寄存器写入数据
    USART4->TDR=ch;
    //等待发送完成
    while(!(USART4->ISR&(0x1<<6)));
}

//单个字符的接收
char getchar(){
    //判断接收数据寄存器是否有数据
    //没有数据则等待
    while(!(USART4->ISR&(0X1<<5)));
    //有数据就将数据读取返回放置内存中变量
    retur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值