硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6594|回复: 16
收起左侧

[客户分享] 发一个bsp_uart_fifo.C文件配置串口1,2,3,4,5,6可以同时使用的例子,方便大家对比参考

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2017-12-30 14:31:37 | 显示全部楼层 |阅读模式
经常有客服反馈说使用此驱动,串口无法使用,这个是因为开发板没有用过的串口,没有做专门的测试。所以这里特此做一个都能用。
开发板使用早期的X3板子,因为这个板子所有引脚都引出来了,使用方便些。
例程下载: X3-001_按键检测和LED控制例程.7z (1.41 MB, 下载次数: 1152)

USART1回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PA9和PA10。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
1.jpg


USART2回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PA2和PA3。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
2.jpg

USART3回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PB10和PB11。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
3.jpg

UART4回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PC10和PC11。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
4.jpg

UART5回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PC12和PD2。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
5.jpg

USART6回环测试,串口调试助手发,然后接受到发送的字符
1. 使用引脚PC6和PC7。
2. 波特率 115200,数据位 8,奇偶校验位无,停止位 1
3. 测试效果
6.jpg

用于测试回环的代码
  1.   
  2.                 if(comGetChar(COM1, &cmd))
  3.                 {
  4.                         comSendChar(COM1, cmd);
  5.                 }

  6.                 if(comGetChar(COM2, &cmd))
  7.                 {
  8.                         comSendChar(COM2, cmd);
  9.                 }

  10.                 if(comGetChar(COM3, &cmd))
  11.                 {
  12.                         comSendChar(COM3, cmd);
  13.                 }

  14.                 if(comGetChar(COM4, &cmd))
  15.                 {
  16.                         comSendChar(COM4, cmd);
  17.                 }

  18.                 if(comGetChar(COM5, &cmd))
  19.                 {
  20.                         comSendChar(COM5, cmd);
  21.                 }

  22.                 if(comGetChar(COM6, &cmd))
  23.                 {
  24.                         comSendChar(COM6, cmd);
  25.                 }
复制代码

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2017-12-30 16:01:34 | 显示全部楼层
之前X3板子的一些下载资料,主要是原理图。http://www.armbbs.cn/forum.php?mod=viewthread&tid=82149&extra=page%3D1 25_2_9acb11250224f63.jpg



回复

使用道具 举报

28

主题

178

回帖

262

积分

高级会员

积分
262
发表于 2017-12-31 11:15:15 | 显示全部楼层
eric2013 发表于 2017-12-30 16:01
之前X3板子的一些下载资料,主要是原理图。http://www.armbbs.cn/forum.php?mod=viewthread&tid=82149&e ...

高~

这相应速度 溜溜的快~ 哈哈~
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2018-1-1 11:53:12 | 显示全部楼层
回复

使用道具 举报

0

主题

17

回帖

106

积分

初级会员

积分
106
发表于 2018-6-5 17:06:23 | 显示全部楼层
不错  硬汉哥
回复

使用道具 举报

27

主题

91

回帖

172

积分

初级会员

积分
172
发表于 2019-1-20 08:58:16 | 显示全部楼层
有没有F429  USART BSP?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2019-1-21 00:07:47 | 显示全部楼层
borrow1988 发表于 2019-1-20 08:58
有没有F429  USART BSP?

F407和F429通用。
回复

使用道具 举报

4

主题

18

回帖

30

积分

新手上路

积分
30
发表于 2020-5-20 10:59:47 | 显示全部楼层
硬汉大大,求助一下,我使用bsp_uart_fifo.c,同时使用串口2(调试打印),串口5(485读卡),串口6(485跟上位机通讯),我发现一个比较严重的问题,若是通讯的频率稍高些,比如每5ms响应一次上位机的应答,那么,这个串口6,就会有乱码上送到上位机。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-5-20 11:13:43 | 显示全部楼层
surge 发表于 2020-5-20 10:59
硬汉大大,求助一下,我使用bsp_uart_fifo.c,同时使用串口2(调试打印),串口5(485读卡),串口6(485跟 ...

5ms很慢,排查下是哪里造成的。是不是上位机卡死了或者上位机使用的串口(USB转串等),处理异常了。

回复

使用道具 举报

4

主题

18

回帖

30

积分

新手上路

积分
30
发表于 2020-5-20 11:54:30 | 显示全部楼层
eric2013 发表于 2020-5-20 11:13
5ms很慢,排查下是哪里造成的。是不是上位机卡死了或者上位机使用的串口(USB转串等),处理异常了。

惊现硬汉哥,感谢硬汉哥!求助硬汉哥!
简单介绍一下项目背景:
硬件平台:STM32F407ZGT6 + FreeRTOS
硬件接口资源:串口2(RS232)做为调试使用;串口5(RS485)做为读卡器使用;串口6(RS485)做为与上位机通讯使用,RS485全为半双工;
串口驱动:bsp_uart_fifo.c (v1.0 库函数版)
项目功能,单片机读卡,将处理后的卡号数据传送给上位机
工作流程:
单片机跟上位机通过RS485通讯,上位机每隔5ms会下发一条5字节的指令,若单片机没有接收到读卡器的数据(读消息队列,超时间15ms),则在5ms内,返回40字节数据给上位机;若读卡器有数据,则处理数据,在15ms内返回给上位机,任务时间间隔为5ms;读卡器通过RS485读取数据,读卡器数据,通过消息队列传递给串口6任务,读卡器任务时间间隔为100ms;

问题现象:
1.刷卡时,读卡器读不到数据,或者是读不全数据;(若是关闭串口6跟上位机通讯的任务,则串口5数据完全正常);
怀疑:是串口在接收函数UartGetChar中关于 “DISABLE_INT()” 和 “ENABLE_INT()” 关闭中断引起串口5数据接收不完全;
实验:单独写串口6的驱动,通过中断接收数据到一个环形队列中,再进行刷卡,读卡器数据正常,也就是串口5数据正常;

2.还是使用bsp_uart_fifo.c,无视读卡器串口数据异常,每5ms影响一次上位机,则上位机接收到的数据,有脏数据,比如我发40个字节的 AA 55,但是上位机收到的可能是 FF 1C 等脏数据;

疑问:
1.bsp_uart_fifo.c 是否可以多串口同时使用?
2. UartGetChar和UartSend 中的  “DISABLE_INT()” 和 “ENABLE_INT()” ,是否会影响到其它的串口接收或者是发送数据?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-5-20 12:23:17 | 显示全部楼层
surge 发表于 2020-5-20 11:54
惊现硬汉哥,感谢硬汉哥!求助硬汉哥!
简单介绍一下项目背景:
硬件平台:STM32F407ZGT6 + FreeRTOS

开关中断不影响的,时间超级短,都不够一个1bit。具体你再溜溜。

像FreeRTOS,uCOS里面有一大堆的开关中断,岂不是什么也干不了。
直接把你的工程上传上来,我看下。
回复

使用道具 举报

4

主题

18

回帖

30

积分

新手上路

积分
30
发表于 2020-5-20 13:49:42 | 显示全部楼层
eric2013 发表于 2020-5-20 12:23
开关中断不影响的,时间超级短,都不够一个1bit。具体你再溜溜。

像FreeRTOS,uCOS里面有一大堆的开关 ...

嗯嗯,代码附件。BarCode_Task.c 是处理读卡器的
Comm_Task.c 是处理跟上位机通讯的

ElevatorControl.rar

2.41 MB, 下载次数: 43

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-5-20 14:23:38 | 显示全部楼层
surge 发表于 2020-5-20 13:49
嗯嗯,代码附件。BarCode_Task.c 是处理读卡器的
Comm_Task.c 是处理跟上位机通讯的

核心函数没什么问题,你整的一些外围处理函数,没看。

担心开关中断影响,这里有个简单的方法,那个串口调用,仅开关中断那个串口的中断即可,无需全局开关中断,你测试看看是否还有问题。这个算是开关中断的最优解。
回复

使用道具 举报

4

主题

18

回帖

30

积分

新手上路

积分
30
发表于 2020-5-20 14:43:44 | 显示全部楼层
eric2013 发表于 2020-5-20 14:23
核心函数没什么问题,你整的一些外围处理函数,没看。

担心开关中断影响,这里有个简单的方法,那个串 ...

嗯嗯,非常感谢硬汉哥,我再瞅瞅,有改善,我再反馈。
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
发表于 2020-9-13 15:39:27 | 显示全部楼层
surge 发表于 2020-5-20 14:43
嗯嗯,非常感谢硬汉哥,我再瞅瞅,有改善,我再反馈。

兄弟最后测试的怎么样了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-9-14 07:12:31 | 显示全部楼层
木兰花 发表于 2020-9-13 15:39
兄弟最后测试的怎么样了?

他的讨论都整到这个帖子里面了

STM32F407 RS485高频传输而产生乱码的问题
http://www.armbbs.cn/forum.php?m ... 8107&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

18

主题

285

回帖

339

积分

高级会员

积分
339
发表于 2020-9-14 11:06:49 | 显示全部楼层
eric2013 发表于 2020-9-14 07:12
他的讨论都整到这个帖子里面了

STM32F407 RS485高频传输而产生乱码的问题

老大好记性啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 14:15 , Processed in 0.258765 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表