8901|21

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急急急!关于SPI控制寄存器 [复制链接]

                                 兄弟用st72f561和stL9950。在设置SPICR寄存器的时候。每次设置的0x5c。程序执行一段时间后便自动变为0x0c。也就是说SPICR的SPE位和MSTR位自动置0。导致单片机的数据无法发送。那位高手指点一下,小弟不胜感激!
此帖出自stm32/stm8论坛

最新回复

                                 你能帮我看一段程序吗?我实在不知道自己到底,出现了什么错误!   详情 回复 发表于 2007-6-7 14:28
点赞 关注
 

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

寄存器的值不可能自己自动改变,只可能被程序改变

                                 还是看看你的程序吧。
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

我的初始化程序

void System_ini(void)
{
     
//i/o port initialization
    PADDR=0x3f;
    PFDDR=0x00;
    PEDDR=0xf9;
    PDDDR=0x6c;
    PDDR|=0x01;

        PAOR=0xf0;
    PBOR=0x0f;
    PCOR=0x02;
         PEOR=0xf9;
    
    SPICSR&=0xfd;
    SPICSR|=0x01;
    SPICR=0x5c;
    
    EICR0=0xaa;
    ARTCSR=0x7a;
    ARTARR=0x01;
}
在执行这段程序的时候每次想往控制寄存器SPICR里写5c.结果每次都是0c.真郁闷了.
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 

回答

SPICSR &= 0xfd; 将ssm位清0,表示有外部信号控制SS引脚来决定是master还是slave.

SPICSR |= 0x01; 将SSI位置1,此位只有在SSM位为1时才有效,不知道你到底是要用内部软件来选择还是用外部引脚来选择。

此时如果你外部引脚配置不当,则会出现模式错误,一旦发生模式错误,spe位和MSTR位就会被自动清0。所以才出现自动变成0C的结果。
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

5
 

回复8_bitMCU

用外部引脚控制,是不是固定接高电平。我的电路没有接选择的是内部软件来选择的。我的初始化程序
void System_ini(void)
{
    PADDR=0x3f;
    PFDDR=0x00;
    PEDDR=0xf9;   //11111001
    PDDDR=0x6c;
    
    PAOR=0xf0;
    PBOR=0x0f;
    PCOR=0x02;
    PEOR=0xf9;
    
    SPICSR&=0xfb;
    SPICSR|=0x03;
    SPICR=0x5c;
    EICR0=0xaa;
    ARTCSR=0x7a;
    ARTARR=0x01;
}  
现在我遇到的问题是:每次向l9950写数据只能写一次,再写就会出现错误了。是不是初始化,还有什么错误?
你能帮我看看吗!小弟最近要结题验收了,十分着急!
如果可以,我把程序发给你。
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

6
 

还是有问题的

你的要求到底是什么,我看你现在配的,还是用软件来配置master/slave,但是你又说你要用外部引脚来配置。你现在配置的是软件选择作为MASTER使用,应该也问题不大。

再写的时候出现什么错误啊,你发送完以后,有没有去清标志位?

最好还是把DATASHEET好好看看,上面初始化的步骤,以及发送/接收的步骤都写得很详细的。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

7
 

回复

我才发现我刚刚打错了几个字.我是要用软件选择主/从方式的.因为硬件没连.
每次发送数据的时候,第一次是正确的.第二次的数据,发生了错误.好像是有一位出现问题.使得本来要发送到寄存器1的数据到了寄存器0.我发送到L9950的数据是24位的,数据的第一位决定发到寄存器1还是0。


好像这样讲不太明白。——!
能当面问你一下吗?qq可以吗?谢谢了!你一定要答应啊!我的qq278387881
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 

继续

l9950不是很了解,刚才看了一眼,好像是根据接收到的第一位来判断放在哪一个寄存器中。

MCU作为主设备发送时是先发高位的,看看你是不是用高位来选择放在哪一个寄存器中的呢?

我们这里不能用聊天软件!
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

9
 

。。

很感激你还特地看了 下L9950。
你说的对。是根据第一位来选择放到那个寄存器的。我也知道MCU作为主设备发送时是先发高位的,这样也就是说先发的最高位放到第一位,是吗。这里应该没错,因为第一次发送的是正确的啊!郁闷了。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

10
 

继续

你用示波器看过么,从MCU发送出去的数据是不是跟你程序里面设的一样,如果一样的话,那也就是说mcu这里没有问题,或者是你对l9950的理解有问题,具体的要你自己查一下了。

如果mcu发送出去的数据和你实际要发的不一致,我们还可以帮你看看。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 

我再研究下。

                                 我再研究下,看看到底什么问题。会不会是在发送的时候出现有一位错误,使得本来发送到寄存器1的发到了寄存器0啊!和时钟一有关系吗?CPHA和CPOL的设置有关吗。我在仔细看看。 实在不行,你能帮我看看程序吗?总之十分感谢你了。你是st公司的吗?还是?呵呵,谢了
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

12
 

一点建议

对于L9950来讲,要设置CPOL=0,CPHA=0;而且L9950的SPI是低位先发的,而MCU是高位先发,所以你可能要注意一下你发送的顺序。
希望对你的调试有帮助。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 

还是没有解决问题

                                 又仔细看了一遍,还是没进展。第一次写数据的时候,状态是对的。然后第二次再写的时候,L9950的输出全部变高了。  如果在第一次写完数据之后单片机复一下位,再写数据就是对的。   谁知道,能让L9950输出全变高有哪些原因吗?
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

14
 

谁能帮我看看程序?

                                 小弟实在是黔驴技穷了。不知道到底出了什么原因,那位帮我看看我的程序。如果有我就发上去了。  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

15
 

继续

不知道你的L9950的负载是什么,只有出现错误,输出的状态才会是"1"
,比如过流,空载等等,而有的错误会将相应的驱动关掉,不能自动恢复,你再查查输出状态,看看是什么错误吧
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

16
 

用示波器看一下

有没有用示波器看看,第二次从MCU发送的数据是不是正确呢?如果跟你设定要发的数据一样,那么就是你自己要发送的东西不对,如果mcu发出的数据不是你想法的,那么就是软件问题。你先要排除到底是哪部分的问题才是。还有看看你第二次发送数据前相关寄存器清了没有?
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 

是读状态寄存器吗

                                 本来是控制电机的 但电机临时没接 如果不接负载会出现你说的情况吗
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

18
 

昨天用示波器看了

                                 昨天用示波器看了的.但我真不知道那数据怎么看.偶尔出现个高低电平,也不知道怎么验证是不是对的.555!  要发三个8位的一共24位!  
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 

示波器还要我教阿

                                 这不是很简单的么,调好单位时间,示波器用单步触发,抓下一屏数据,拉开度一下不就可以了。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

20
 

见谅

                                 这也许就是高手和菜鸟的区别吧,见谅了.我再研究下.
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表