请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L15系列IO模拟串口失败,请教

[复制链接]
自带腹肌的外套 提问时间:2019-3-21 10:33 /
2ST金币
本帖最后由 自带腹肌的外套 于 2019-3-21 10:54 编辑

最近在做一个项目,因为需要用到多个串口,硬件串口就显得不够用了,所以 就打起了IO口模拟串口的主意,然后通过将IO口设置为下降沿中断来捕获串口传送开始的信号
于是做了入图的配置,之所以设置为下拉,是因为我发现,如果设置为上拉,如果是因为不小心触发的中断则会导致接收到 FF 的数据,而且这样也并不会影响到下降沿中断的触发。
然后也是最重要的就是IO口时序的模拟接收了,根据波特率定时查看IO口状态并进行记录程序如下(使用HAL库编写,CUBEMX 进行配置):
这个时候问题就出来了,数据总是不能正确接收,delay_us的延时是通过定时器实现的,这个延时同时也在模拟I2C接口中有用到,系统时钟和定时器配置如下
时钟配置为内部MSI  2M频率,不分频,则外设时钟和系统定时器都应该同样是2M频率
TIM6的TIME_OUT = (period+1)/(prescaler+1)/clock = 2 / 1 / 2 = 1us ;  这里的计算应该没有问题吧,然后定时器回调函数做了如下处理
Nconter 是一个全局变量,下面是延时函数

搞了好几天还是没搞明白是哪里出了问题导致接收到的数据总是不准确,我用示波器看了传入到芯片  IO  的数据的波形没有任何问题,所以烦请哪位大神看到了帮忙解惑一下是哪里出了问题,或者我该怎么测试去找出问题所在。

CUBEMX时钟配置

CUBEMX时钟配置

最佳答案

查看完整内容

首先帮忙骂一下方案设计者, IO模拟串口做应用,不顾产品稳定性坑害消费者。 其次 us级定时器 1us中断一次,系统时钟你设置的2M 你的MCU还有时间处理其他任务? 其三 你把时钟设置32M试试,定时器中断优先级要比串口高 其四 只要串口启动信号,停止信号你不检测了吗?一个bit至少采样5次,在判定实际的bit值,等等措施都要做好。 其五 串口IO平时就应该是高电平,这是标准,你把平时把IO拉低,别人平时可是拉高的 做方案的娃好惨 ...
收藏 评论7 发布时间:2019-3-21 10:33

举报

7个回答
tanic 回答时间:2019-3-21 10:33:05
本帖最后由 tanic 于 2019-3-21 14:58 编辑

首先帮忙骂一下方案设计者, IO模拟串口做应用,不顾产品稳定性坑害消费者。
其次 us级定时器  1us中断一次,系统时钟你设置的2M 你的MCU还有时间处理其他任务?
其三 你把时钟设置32M试试,定时器中断优先级要比串口高
其四 只要串口启动信号,停止信号你不检测了吗?一个bit至少采样5次,在判定实际的bit值,等等措施都要做好。
其五 串口IO平时就应该是高电平,这是标准,你把平时把IO拉低,别人平时可是拉高的

做方案的娃好惨

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

edmundlee 回答时间:2019-3-21 20:03:42
看了楼主的代码,除非你是做一示范项目, 就是说除了做模拟串口外, 其它啥也不用管, 否则你做不来这模拟串口, 因为你的编程完全没有对多任务的时间慨念。
N年前用51做过, 是可行的, 但需要技巧。

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

h_12345 回答时间:2019-3-22 09:13:56
模拟串口可靠性太差,还不如使用原本的串口进行分时复用。或者使用模拟开关进行转换端口

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

自带腹肌的外套 回答时间:2019-3-22 10:03:32

今天用这个延时函数进行发送尝试,之前一直在拿接收进行尝试(因为我们只需要接收东西),我通过操作IO口高低电平然后通过示波器观察波形发现,延时函数100us 电平宽度在250左右,将延时时间进行相应放大后就能正常发送某 Band 的数据了,我又考虑了下导致这样结果的原因,我的SYSCLK和APB1和APB2均是2M的频率,再考虑语句执行时间和延时时间混在一起就导致了这种情况。所以我得到的经验教训就是,在主频比较低而你又要求定时单位比较小的时候(我现在是us级的定时),建议使用示波器看下,可能会存在很大误差。除非迫不得已,否则少用IO口模拟串口,帖子就到这里吧,问题找到了。
自带腹肌的外套 回答时间:2019-3-22 10:04:07
tanic 发表于 2019-3-21 14:52
首先帮忙骂一下方案设计者, IO模拟串口做应用,不顾产品稳定性坑害消费者。
其次 us级定时器  1us中断一次 ...

是呀,老板一句省成本,我们就要去搞
自带腹肌的外套 回答时间:2019-3-22 10:04:55
h_12345 发表于 2019-3-22 09:13
模拟串口可靠性太差,还不如使用原本的串口进行分时复用。或者使用模拟开关进行转换端口 ...

是的,可靠性有点。。。。想象是美好的,现实是残酷的
自带腹肌的外套 回答时间:2019-3-22 10:07:00
edmundlee 发表于 2019-3-21 20:03
看了楼主的代码,除非你是做一示范项目, 就是说除了做模拟串口外, 其它啥也不用管, 否则你做不来这模拟 ...

的确,经验比较少,没考虑到多任务,这次也是涨教训了
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版