利用stm32的两个引脚接收数据
现在在单片机上有两个引脚,一个是数据口,一个时钟口,怎么用stm32来读取上面的数据时钟大概是4us一个周期,数据是8位.,时钟的上升沿时获取数据引脚的一位数据.用spi...
现在在单片机上有两个引脚,一个是数据口,一个时钟口,怎么用stm32来读取上面的数据时钟大概是4us一个周期,数据是8位.,时钟的上升沿时获取数据引脚的一位数据.用spi协议可以接收吗?还是可以用外部中断检测?还是利用定时器接收??求高手解决啊~~
就是根据上面的时序图来接收数据,stm32是接收的 展开
就是根据上面的时序图来接收数据,stm32是接收的 展开
展开全部
同样感觉问题不大清楚,如果单片机上的那两个引脚的协议确定,那么就接到stm32上的相应外设引脚即可,然后设置下双方工作模式。如果确定是两根线,那么iic的可能性大一些(不过要查下iic的总线时序,看看是否与描述的一致),毕竟标准spi要miso,mosi,clk与cs四根线。其他的串行通讯暂时能想到的都是异步的了。如果协议不确定,只是想分析协议与数据,那么最好的方式是使用逻辑分析仪。
如果这种情况下仍然想要使用stm32来分析,只能使用io口中断或定时器捕捉模式来分析协议。如果只是只想要数据的话,可以用io中断,再每个单片机clk的上升沿触发中断,在isr中把另一个io口采集到的数据保存并移位(要注意msb在前还是lsb在前,spi是msb在前),采集完8个后处理。不过这样肯定会做累的半死。所有的时序,都要处理好了。还要考虑到各种出错的可能性。
当然如果后面的描述正确的话,可以尝试使用spi协议(spi规定是msb在前,要对应好了)但是需要单片机上一根额外的引脚作为片选接到stm32上,或者想其他办法把片选接上,stm32作为从机使用mosi线,,设置下相位和极性即可。
如果这种情况下仍然想要使用stm32来分析,只能使用io口中断或定时器捕捉模式来分析协议。如果只是只想要数据的话,可以用io中断,再每个单片机clk的上升沿触发中断,在isr中把另一个io口采集到的数据保存并移位(要注意msb在前还是lsb在前,spi是msb在前),采集完8个后处理。不过这样肯定会做累的半死。所有的时序,都要处理好了。还要考虑到各种出错的可能性。
当然如果后面的描述正确的话,可以尝试使用spi协议(spi规定是msb在前,要对应好了)但是需要单片机上一根额外的引脚作为片选接到stm32上,或者想其他办法把片选接上,stm32作为从机使用mosi线,,设置下相位和极性即可。
更多追问追答
追问
那我详细说明下吧,现在用stm32来接收单片机上的数据,对于那块单片机来说,我只有那2个引脚的资料,数据是从单片机上发出来的,stm32是负责接收,现在是确定用两个引脚,一个是clk,一个data,原来有程序是用spi来接收的,标准的spi是使用4根线,但是用spi的只接收模式,2根线也可以的.数据也是接收到的,但是数据不正确了,对了stm32的spi设置是从机模式.利用dma来读取数据的
现在我换了方案,用stm32来接收那些数据,但是怎么也接收不正确
追答
感觉对于这个问题,有两个问题需要解决,第一个个就是数据的起始位是哪个,这个一般在spi协议中用片选信号处理,即当cs片选拉低的时候就提示从机传输开始,然后根据相关的极性与相位设置来传输数据.如果单片机主站再启动后完成初始化就一直不停地发送数据,那么首先要确定的就是什么时候是一个字节传输的起始位,对于spi外设来说就必须要有cs片选,如果没有就要想办法确定,否则spi是没法工作的,毕竟spi本质上就是一个移位寄存器,理论上可以先传4bit,然后等半天在传后4bit.只要在一个cs片选有效周期内存在8个完整的clk脉冲就行,如果片选一直拉低,那么程序里也无法判断出什么时候是一个字节传输开始及结束,我们也就无法判断出到底采集到的数据时一个完整的字节,还是两个字节的部分拼接起来的.
要么就用io口中断模拟下时序,每个上升沿采集1bit.但是仍然要判断出什么时候是第一bit的数据.
当然如果发送数据不频繁倒是可以用延时或者定时器之类的处理下.
另一个问题是字节的传送顺序,这个好办,试下就行.
另外,上面的时序图如果是单片机主站的话,那么应该是out信号接到stm32上吧,如果是这样的话明显不是clk的上升沿锁存数据.倒像是在latch的上升沿锁存的输出数据,所以说感觉这个不像spi.
展开全部
你的问题不是太清楚:
1. 是STM32要读取单片机上面的数据吗?可以使用很多协议,但是要先确定哪一方主动,如果是单片机主动发,那STM32最好用中断,单片机方根据需要或者定时发送;如果是STM32主动读,那STM32可以根据需要或者定时读,单片机则采用中断接收。只要双方匹配,根据你数据的实时程度,不难确定哪方主动。由于你只有两个口建议用I2C,SPI当然也可以,实现的方式可以手动模拟协议,也可以利用芯片内建的协议模块。
2. “时钟大概是4us一个周期,数据是8位.,时钟的上升沿时获取数据引脚的一位数据” 这个要求是单片机的要求还是STM32的要求?为什么会有这样的要求?
1. 是STM32要读取单片机上面的数据吗?可以使用很多协议,但是要先确定哪一方主动,如果是单片机主动发,那STM32最好用中断,单片机方根据需要或者定时发送;如果是STM32主动读,那STM32可以根据需要或者定时读,单片机则采用中断接收。只要双方匹配,根据你数据的实时程度,不难确定哪方主动。由于你只有两个口建议用I2C,SPI当然也可以,实现的方式可以手动模拟协议,也可以利用芯片内建的协议模块。
2. “时钟大概是4us一个周期,数据是8位.,时钟的上升沿时获取数据引脚的一位数据” 这个要求是单片机的要求还是STM32的要求?为什么会有这样的要求?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询