硬汉嵌入式论坛

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

[有问必答] 串口发送出现硬件错误

[复制链接]

6

主题

20

回帖

38

积分

新手上路

积分
38
发表于 2021-5-7 09:37:23 | 显示全部楼层 |阅读模式
本帖最后由 dnf557 于 2021-5-13 07:43 编辑

大侠,我遇到一个问题。
在跑AD7606发现串口无法显示,经行了DeBug。

如图,根据 1号 检查到了2号的错误地址,然后3号的串口助手发送了这点数据。

看不懂2号这个 F7FFFFF4 这个是什么意思。

还有,根据我的理解,在发送的时候是吧所以的数据放到FIFO的数组里面,
然后通过中断把所有的在FIFO里面的数据都发完,完成后再退出中断。

大侠,请指点。

串口出现问题.png


回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-7 09:38:05 | 显示全部楼层
我其他的都关闭了,就单独打开了串口
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-5-8 07:51:23 | 显示全部楼层
bsp.C还有个按键检查的部分,看看注释掉没有,另外就是HSE_VALUE与你板子的实际晶振大小是否一直。
回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-8 10:11:47 | 显示全部楼层
eric2013 发表于 2021-5-8 07:51
bsp.C还有个按键检查的部分,看看注释掉没有,另外就是HSE_VALUE与你板子的实际晶振大小是否一直。

一开始没找到,最后发现了也屏蔽了,还有就是HSE的也是一样的呢。

结果还是这样,就发送了一丢丢。

我用了教程后,关闭其他程序,就可以实现,为啥这个模板不行勒。

大侠,你出现过这个问题没
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-5-8 11:16:41 | 显示全部楼层
dnf557 发表于 2021-5-8 10:11
一开始没找到,最后发现了也屏蔽了,还有就是HSE的也是一样的呢。

结果还是这样,就发送了一丢丢。

此程序里面相关的都注释掉,仅测下串口是否正常。
回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-8 14:10:37 | 显示全部楼层
eric2013 发表于 2021-5-8 11:16
此程序里面相关的都注释掉,仅测下串口是否正常。

注释了,Init的相关函数都关掉了。滴答里面就一个Key的扫描函数,也关掉了。

串口的配置正确的。

最后无奈换了一个方法,使用了例程方案,用滴答作为COVA,B的启动条件 这一套方案。
一开始做的是用PWM来控制COVA,B。

回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-8 14:28:02 | 显示全部楼层
大侠,有没有介绍 滴答定时器的多组软件定时的手册

我发现我抄例程后,跑起来不太对啊。感觉我好像理解错了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-5-9 07:30:11 | 显示全部楼层
dnf557 发表于 2021-5-8 14:28
大侠,有没有介绍 滴答定时器的多组软件定时的手册

我发现我抄例程后,跑起来不太对啊。感觉我好像理解 ...

第22章,适用于所有STM32系列,标准库,HAL库都一样。
http://www.armbbs.cn/forum.php?m ... &extra=page%3D1
回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-11 08:21:36 | 显示全部楼层
eric2013 发表于 2021-5-9 07:30
第22章,适用于所有STM32系列,标准库,HAL库都一样。
http://www.armbbs.cn/forum.php?mod=viewthread& ...

大侠,这个函数的说明:
uint32_t SystemCoreClock = 8000000;//这个定义,我的理解是一开始不用HES的时候用的
                                                         当我们启动了HES后,这个定义的函数就自己跟新为SYSCLK了嘛
SysTick_Config(SystemCoreClock / 1000); //so,这个函数在启动HES后,就变成了1ms. 是这个意思吗

如果上述我理解的对的话,那么以下用定时器的封装我就看不懂了
        uiTIMxCLK = SystemCoreClock / 2; //根据上面理解应该更新为72M,然后等于36M

        usPrescaler = uiTIMxCLK / 1000000 - 1;//分频后为36,
根据溢出时间公式
    T=(分频*装载值)/72M =( 36*0xffff )/72M = 0.032us //并不是1us

大侠,请指点。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-5-11 08:56:57 | 显示全部楼层
dnf557 发表于 2021-5-11 08:21
大侠,这个函数的说明:
uint32_t SystemCoreClock = 8000000;//这个定义,我的理解是一开始不用HES的时 ...

理解不对。

1、首先STM32F1系列这里不需要除以2,早期例子里面的写有问题。
uiTIMxCLK = SystemCoreClock
222.png

2、这里你计算溢出时间,完全理解偏了,这个单次定时器不是跑的溢出,跑得是比较捕获,设置分频为 usPrescaler 后,那么定时器计数器计 1 次就是 1us,而参数 usPeriod
的值是决定了最大计数:
usPeriod = 0xFFFF 表示最大 0xFFFF 微秒。

回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-11 10:28:09 | 显示全部楼层
eric2013 发表于 2021-5-11 08:56
理解不对。

1、首先STM32F1系列这里不需要除以2,早期例子里面的写有问题。


哦哦哦,奈斯,我说呢,这个东西想了1天,为什么要/2。

我说为什么第二给问题的定时器后面有CC捕获的函数在。原来时钟的基时配置就是1us,最大装载是为了计数。

感谢大侠指点
回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-12 16:48:21 | 显示全部楼层
eric2013 发表于 2021-5-11 08:56
理解不对。

1、首先STM32F1系列这里不需要除以2,早期例子里面的写有问题。

大侠,不行了,得让您老人家看看了。

设置的时钟我看来看去,DEBUG也是1ms,但是更改软件定时器时间,串口助手那边收到的数据不是按照我设置的时间走。
回复

使用道具 举报

6

主题

20

回帖

38

积分

新手上路

积分
38
 楼主| 发表于 2021-5-13 07:49:18 | 显示全部楼层
eric2013 发表于 2021-5-11 08:56
理解不对。

1、首先STM32F1系列这里不需要除以2,早期例子里面的写有问题。

附件不知道为什么放不上,我就贴给网盘。

大侠,抽空帮我看看一下。

链接:https://pan.baidu.com/s/1eORlldL6U4V6Xfwiu2EmFg
提取码:xq0j
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 20:38 , Processed in 0.369228 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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