OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4651|回复: 20

【STM32F103】求一个按照如下时序图写的程序

[复制链接]

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
发表于 2017-7-27 10:07:15 | 显示全部楼层 |阅读模式
25金钱
需要达成一个目的,即按照如图所示写一个程序,来发送数据

具体如下:一个io口串行发送数据,一个io口发送时钟,一个io口发送ltch
key0按下,io口发送数据0x9e,并且ltch拉低,key1按下,在刚才所发送数据上加0x0a。

我是实在没办法了,写不出来,头发掉了一堆。。。还望各位大神能给予一定帮助。
若各位大神实在没空,告诉我怎么写也行尽量详细一点,我现在只能发送一个时钟,如何根据时钟发送数据,完全不会
也就是说,如何用io口串行发送一串数据,在这基础上如何根据时钟按照时序图那样发送数据?

还望各位大神指教

时序图

时序图

最佳答案

查看完整内容[请看2#楼]

网上有程序为什么不去找呢,免费的,恭喜你,改改就能用了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-7-27 10:07:16 | 显示全部楼层
本帖最后由 wxjhby 于 2017-7-27 12:44 编辑

网上有程序为什么不去找呢,免费的,恭喜你,改改就能用了

AD8370.zip

1.09 KB, 下载次数: 202

回复

使用道具 举报

115

主题

548

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2098
金钱
2098
注册时间
2013-11-27
在线时间
518 小时
发表于 2017-7-27 10:18:36 | 显示全部楼层
开个价吧
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 10:21:33 | 显示全部楼层

你要多少
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-7-27 10:39:13 | 显示全部楼层
这不就是SPI么。。。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 10:48:46 | 显示全部楼层
wxjhby 发表于 2017-7-27 10:39
这不就是SPI么。。。

不行啊,不能用任何协议的,只能按照时序图自己写协议啊,我用的spi示波器显示输出很正常,就是芯片不工作,他没有那个协议啊
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 10:53:07 | 显示全部楼层
我还是更希望大家能教我怎么写,而不是来和我谈交易
回复

使用道具 举报

18

主题

139

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2014-10-29
在线时间
228 小时
发表于 2017-7-27 11:04:07 | 显示全部楼层
这什么芯片?
回复

使用道具 举报

4

主题

349

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1046
金钱
1046
注册时间
2017-5-19
在线时间
335 小时
发表于 2017-7-27 11:04:23 | 显示全部楼层
本帖最后由 wxjhby 于 2017-7-27 11:12 编辑

看芯片支持的速度是多少,降低SPI的速率
然后SPI的NSS用软件控制spi的极性是否设置正确
一定要满足图中的 TDS TCK等等这些参数才能通讯成功
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 11:39:01 | 显示全部楼层
yklstudent 发表于 2017-7-27 11:30
没有付出就想着收获,楼主觉得有这么好的事情吗?

好好好,我也就是看到有人要过,所以那么一写,我更希望的是能够授人以渔,如果说我来请教怎么写,请教一些我不明白的事,都需要付出,那我不明白我来这个论坛干嘛了
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 11:40:20 | 显示全部楼层
wxjhby 发表于 2017-7-27 11:04
看芯片支持的速度是多少,降低SPI的速率
然后SPI的NSS用软件控制spi的极性是否设置正确
一定要满足图中 ...

意思是只要我的spi速度不超过芯片要求的速度就可以吗
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 11:40:50 | 显示全部楼层

AD8370
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 11:45:12 | 显示全部楼层
wxjhby 发表于 2017-7-27 11:04
看芯片支持的速度是多少,降低SPI的速率
然后SPI的NSS用软件控制spi的极性是否设置正确
一定要满足图中 ...

可是我的芯片说的最低时间都是ns级的,而我的spi速度设置函数选的是256分频,也就是说才一百多千HZ,没有超过它的限制啊
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 15:55:06 | 显示全部楼层
wxjhby 发表于 2017-7-27 12:41
网上有程序为什么不去找呢,免费的,恭喜你,改改就能用了

谢谢谢谢!我参考一下,写一个F1的
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-7-27 16:17:07 | 显示全部楼层
这就是spi 啊,用过很多ADI的器件,ADI最喜欢用非标准spi,估计为了避开专利问题?会看时序图,用标准spi驱动即可。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 16:26:53 | 显示全部楼层
Acuity 发表于 2017-7-27 16:17
这就是spi 啊,用过很多ADI的器件,ADI最喜欢用非标准spi,估计为了避开专利问题?会看时序图,用标准spi驱 ...

可我用上spi,就是不通啊,是不是我的速率太低?
示波器显示32那几个管脚输出波形没问题,就是芯片不工作,比如说我这个芯片正常工作电流是0.08A,我接上就是0.05A,就是不通,再接上频谱分析仪,显示的依然不通。。。(都是粗测)
是不是我的速率太低(一百多khz,芯片极限是几十ns),还是什么问题呢
对了,芯片那个ltch端,我常接地了,是不是这个原因呢?
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-7-27 16:27:31 | 显示全部楼层
授人以渔与:
spi主机封装起来就4个情况,通杀所有标准的、非标准的spi,而且方便移植:
int spi_send_then_recv(const void *send_buff,unsigned short send_size,void *recv_buff,unsigned short recv_size);   //发送完再接收,最常用的,常见于读寄存器。
int spi_send_then_send(const void *send_buff1,unsigned short send_size1,const void *send_buff2,unsigned short send_size2);//发送完再发送,最常用的,常见于写寄存器。
int spi_send_recv(const void *send_buff,void *recv_buff,unsigned short data_size);//非标准spi,2个情况:1、发送完同时接收完,看时序图(如:一些控制芯片,同时返回控制状态);2、只接收,此时发送动作并非真的发送,只是用来产生spi时钟(如ADC芯片,12位、14位、16位常见)。
int spi_send(const void *send_buff,unsigned short send_size); //只发送。
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 16:37:44 | 显示全部楼层
Acuity 发表于 2017-7-27 16:27
授人以渔与:
spi主机封装起来就4个情况,通杀所有标准的、非标准的spi,而且方便移植:
int spi_send_th ...

那个,你是不是误会我的意思了,我的spi输出没有问题,就是芯片不通。。。
spi的问题我也问过了,也是您回答的,已经解决了,而且波形无比正确,就是芯片无法正常工作。。。
回复

使用道具 举报

2

主题

685

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3448
金钱
3448
注册时间
2017-7-4
在线时间
869 小时
发表于 2017-7-27 16:45:37 | 显示全部楼层
ljlxh007 发表于 2017-7-27 16:26
可我用上spi,就是不通啊,是不是我的速率太低?
示波器显示32那几个管脚输出波形没问题,就是芯片不工 ...

1、手册上有说明时钟最低周期,粗略计算下spi的时钟速率即可;通信失败一般是2个情况:1)spi速度太快导致通信不正确,将spi速率降到最低试试;2)时钟相位(请看spi4种相位)必须和时序图一致,如AD8370是时钟下降沿改变数据,上升沿捕获数据。
2、ltch端接常接地,手册上没有说明,理论上没有关系;但是:有些器件明确说明该引脚(一般称片选cs)必须在最后拉高后才保证数据发送或者接收成功。这类引脚一般建议将其连接至单片机io口,选择性大方便控制,同时spi总线也可挂多个外设!
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 16:48:59 | 显示全部楼层
Acuity 发表于 2017-7-27 16:45
1、手册上有说明时钟最低周期,粗略计算下spi的时钟速率即可;通信失败一般是2个情况:1)spi速度太快导 ...

搜嘎,谢谢你!两次帮了我大忙!!!!!
但是这次可能不能给你最佳答案了,因为上面有位仁兄给了个8370的代码,我看了颇受启发
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-9-11
在线时间
14 小时
 楼主| 发表于 2017-7-27 16:56:11 | 显示全部楼层
Acuity 发表于 2017-7-27 16:45
1、手册上有说明时钟最低周期,粗略计算下spi的时钟速率即可;通信失败一般是2个情况:1)spi速度太快导 ...

对了,照第二点说,我也不用另外写了,直接把nss端接到他的ltch端就可以了吧,反正spi也是通信的时候nss端拉低
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-18 12:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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