2.stm32实验二串口通信,printf函数

本文详细介绍了两个STM32串口通信的实验。实验一涉及使用Cubemx配置USART1为异步通信,通过检查寄存器状态进行数据的发送和接收。实验二则展示了如何利用printf函数以及HAL库的UART收发功能实现串口数据传输。
摘要由CSDN通过智能技术生成

实验一:串口通信<串口调试助手发送数据,数据原样返回>

  1. 观看原理图:

1.1打开串口1,使用异步通信

2.使用usb串口(与公口串口复用同样的寄存器口PA9,PA10),注意按钮拨动到usb口

 注意:第一步打开串口1,使用异步通信后,软件会自动配置好,即第二步不是手动做的,是软件自动完成的.


  1. 实验步骤:

(1)Cubemx的USART1串口设为异步通信(Asynchronous)

(2)收发数据前,先判断发送或者接收寄存器不为空,看原理图,发送看SR寄存器第7位,接收是第5位.在usart.c写接收和发送函数

void USART1_PutChar(uint8_t ch){

while(!(USART1->SR&(1<<7)));//判断发送寄存器为空,不空等待

USART1->DR=ch;

}

uint8_t USART1_GetChar(void){

while(!(USART1->SR&(1<<5)));//判断接收寄存器为空,不空等待

return USART1->DR;

}

(3)为了main.c中可以使用函数,必须进行声明

void USART1_PutChar(uint8_t ch);//发送
uint8_t USART1_GetChar(void);//接收

(4)main.c的while(1){}中使用

uint8_t ch;
ch = USART1_GetChar();
USART1_PutChar(ch);
HAL_Delay(200);

实验二:printf函数使用与HAL库的USART收发函数

  1. 实验步骤

(1)printf函数使用

int fputc(int ch, FILE *p)

{

while(!(USART1->SR&(1<<7)));//判断不为空

USART1->DR=ch;

return ch;

}

写上述函数(用来重定位)即可使用printf函数在串口打印

例如:printf("age=%d",x);

(2)HAL库使用

uint8_t ch[10] = {0};

HAL_UART_Receive(&huart1, ch, 10, 100);

HAL_UART_Transmit(&huart1,ch, 10, 100);

使用上述函数也可以串口发送数据,注意与实验一的区别,实验一为寄存器方法,实验二是HAL库方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值