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