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

求助:stm8s003F3 3线SPI通讯方式应该怎样初始化?

[复制链接]
懂事儿 提问时间:2016-3-16 13:17 /
看串口和SPI通讯例程中,SPI部分的初始化为:
  /* Initialize SPI in Slave mode  */
  SPI_Init(SPI_FIRSTBIT_LSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_SLAVE, SPI_CLOCKPOLARITY_LOW,
           SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(uint8_t)0x07);
我的IC是3线的,最先发送的是指令还是数据选择位,后面的一字节是高位在前,其它的我就都不明白了

求高人指点。
收藏 评论10 发布时间:2016-3-16 13:17

举报

10个回答
懂事儿 回答时间:2016-3-16 13:35:47
按我的理解,将例程中的语句改为:
  /* Initialize SPI in Slave mode  */
  SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_4, SPI_MODE_SLAVE, SPI_CLOCKPOLARITY_LOW,
           SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT,(uint8_t)0x07);

        SPI_SendData();就可以发送一字节的数据了,可是那位应该最先发送的指令/数据选择位应该怎么发送下去呢?
懂事儿 回答时间:2016-3-17 09:43:43
哪位大侠帮帮忙啦!
xmshao 回答时间:2016-3-18 11:37:50
为什么完全不看手册呢
即使不看手册。库函数对各个参数都有详细注释。
SPI通信模式、数据高位先发还是低位先发、极性、主从模式、时钟、片选模式。。。。
懂事儿 回答时间:2016-3-21 12:52:25
本帖最后由 懂事儿 于 2016-3-21 12:54 编辑
xmshao 发表于 2016-3-18 11:37
为什么完全不看手册呢
即使不看手册。库函数对各个参数都有详细注释。
SPI通信模式、数据高位先发还是低位 ...

哥,我不是不看
是找不到呀
请教:在哪儿有关于这种3线9bit模式下,这个指令和数据选择位的说明或设置?我看库函数好像都是4线,8bit模式。
xmshao 回答时间:2016-3-21 20:46:39
三线四线都可能,具体几线结合具体应用。

至于数据位,不知你是哪里看出是9位了。

STM8S系列有个参考手册,RM0016,这个网站的资料下载区就可以找到。
懂事儿 回答时间:2016-3-22 08:35:36
xmshao 发表于 2016-3-21 20:46
三线四线都可能,具体几线结合具体应用。

至于数据位,不知你是哪里看出是9位了。

哥哥,不是我在哪里看出了9位,我的被控制的器件要求的就是9位呀!
要求在总线启动后,第一位传送过去的是选择指令还是数据的,然后的8位才是从高到低的要传送数据。
最先传的这一位是用来区分将要传给IC的是寄存器还是给寄存器的参数的。
这种3线9位的SPI口相信大家搞程序的都用IO模拟过的。
我纠结的正是在库函数中看不到如何设置这最先传送的关键一位的。
xmshao 回答时间:2016-3-22 21:14:40
哦   估计库函数里找不到你要的这个选择位。

你的被控器件是个什么东西?

如果你的器件必须这样,除了用软件模拟外;
再就是是否可以考虑把这个特殊位设计一个特殊字节用来识别命令还是数据。

懂事儿 回答时间:2016-3-23 10:36:31
本帖最后由 懂事儿 于 2016-3-23 10:37 编辑
xmshao 发表于 2016-3-22 21:14
哦   估计库函数里找不到你要的这个选择位。

你的被控器件是个什么东西?

感谢哥哥的回复,我现在也决定用IO口模拟了。
可是说实话,我对STM8S才刚刚接触,依照例程写的IO口输出方波程序都没有输出。
求您老给看下问题出在哪里:
#include "stm8s.h"
void Delay(u32 nCount)
{
  while (nCount != 0)   nCount--;
}
int main(void)
{
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

    GPIO_Init(GPIOB,GPIO_PIN_5,GPIO_MODE_OUT_PP_HIGH_SLOW );

    while(1)
    {
      GPIO_WriteReverse(GPIOB, GPIO_PIN_5);
      Delay(10);
    }
}
xmshao 回答时间:2016-3-23 22:55:45
你除了玩代码外还得看芯片技术手册,
你的PB5配置有问题,不能这样配。要配置为OD,而且外边还得加上拉。它是个真开漏脚,细节看手册。
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版