使用HAL库完成STM32F407ZET6的两个串口回环

最近一个应用场景是:使用串口完成FPGA与MCU通信,这里用到两个串口,分别是USART1和USART3,串口1与上位机通信,FPGA与MCU的串口3连接。

为了测试,设计了一个回环实验,即:串口1接收上位机发送的数据,串口3将接收的数据发出并通过串口3接收,串口1再发送给上位机。

需要注意的是,“串口3将接收的数据发出并通过串口3接收”,这一步是需要硬件上物理连接的。即串口3的RX与TX短接,这样数据可以使用。

测试使用的仅为一个F4的最小系统板

下面开始进行配置:

时钟配置:

由无源晶振提供时钟,所以都选择Crystal/Ceramic Resonator(若MCU的时钟是由FPGA的IO口提供时,需要选择BYPASS Clock Source有源时钟)。

SYS配置:

使用ST-LINK进行下载程序并调试,所以选择Serial Wire。

串口配置:

串口1与串口3的配置都是一样的,选择异步,波特率选择115200,并且打开串口中断,其他默认。

由于与FPGA连接的引脚是PD8与PD9,在这里还要对引脚进行更改(默认的不是这个引脚)

时钟树配置:

单击,选择串口功能,右上角会出现一个黑色钉子,代表完成配置。

代码部分:使用的是串口中断逻辑:首先在int main()函数里打开串口3的接收,这里串口1的接收可开启可不开启

解释以下这句话:这是开启串口的接收函数,有IT代表是中断接收

&huart3表示对象,这里指选择串口3进行配置

(uint8_t *)&tran_data:这个指针是串口接收时所存放的地方

1:表示接收到的数量

接下来就是重点的代码了

中断回环函数,即当某个串口完成了接收后,就会进入这个函数完成对应指令。我们的流程第一步是上位机通过串口1发送指令。当串口1接收到数据tran_data后,就会进入第一个if语句中,在这个语句里面,选择使用串口3发送tran_data;随后开启串口3的接收,放入rec_data中;在这个实验中,串口3的RX与TX是连接在一起的,所以串口3发送的数据也会被串口3接收,当串口3接收后进入第二个if语句中,这里选择将串口3接收的数据,通过串口1进行发送,串口1是与上位机连接的,所以最终可以在上位机看到接收的内容。实际的效果是,发送什么数据,上位机就显示什么数据。

注意:因为使用了串口回环函数后,串口就会关闭,所以在每一个if语句的最后,都需要重新打开串口,否则只能完成一次回环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值