stm8l gpio模拟串口,有没有好方法啊,我用定时器不停判断高低电平,现在接收数据老是有误码,
就一个串口,现在要三个,得模拟两个,
模拟串口9600波特率,
是用定时器不断的判断起始位接收数据,还是外部中断加定时器,
两种方法都试了,都只能接受到前面几个字节是对的,后面就错了.
晶振16Mhz 2分频, 8Mhz,
我用示波器比较了标准串口的104us,然后我用定时器拉高拉低io口,示波器量了也是104us,
发送没什么问题,就是接收比较麻烦.
离线
你可以短路你自己模拟的两个io,看看能不能自发自收
离线
你可以短路你自己模拟的两个io,看看能不能自发自收
前面几个字节正常,后面就错了,是不是由于定时器中断代码运行占用了一定的时间,导致后面时序偏差了
离线
你用大循环做肯定不行
别人的例子只是例子而已,只是告诉你有这么一个功能和方法
你需要用状态机
主循环去轮巡状态机,中断去填充缓冲区
你想想,如果让你设计个硬件串口,你能如何设计?就解决这个问题了
另外就是,单片机要跑16M
示波器看下波特率是不是偏差太大,如果太大,需要用外部晶振
离线
超级萌新 说:你可以短路你自己模拟的两个io,看看能不能自发自收
前面几个字节正常,后面就错了,是不是由于定时器中断代码运行占用了一定的时间,导致后面时序偏差了
所以让你用状态机
通讯的时候,不执行代码
数据接收完成才执行代码
离线
接收几倍频率采样的,最起码得9600×4吧
离线
我认为楼上说的完全有道理。
离线
采样频率提高就可以了,或者用stm8的捕获功能。
离线
谢谢大家搞定了, 我提高了采用频率,连续三个低则判定低电平,连续三个高则判定高电平。
离线
要用定时器触发 DMA的读取和发送方式 ,更高效
离线
最近也在研究这个,有个项目用了F407但是需要七个串口,而且还是一个232的,波特率估计不会很高,尝试了几种方案都感觉有误码。
离线
用状态机,而且提高采样率,每次检测到起始位的时候,都开始新一轮的数据接收,这样应该就可以避免前几个字节对,后面错误的问题
离线
模拟串口,采样是要放在最高级别
离线