搜索
查看: 2006|回复: 4

[原创] 【STM8-SO8】05-SPI的使用

[复制链接]

该用户从未签到

26

主题

2070

帖子

6

蝴蝶豆

论坛元老

最后登录
2021-3-31
发表于 2019-2-15 12:52:19 | 显示全部楼层 |阅读模式
STM8S001J3 由于 VCAP 的需要因此少了一支 I/O 引脚,跟另外 2 颗 8 引脚的 STM8 比较起来少了 PB7,而这一支引脚的复用功能是 SPI 的 MISO,因此对于 STM8S001J3 来说 SPI 是没有 MISO 引脚的。

P01.JPG

SPI 的 CPOL 与 CPHA 设定决定了四种时序关系:

CPOL         CLOCK POLARITY  时钟极性
        0       SCK空闲状态保持低电位
        1       SCK空闲状态保持高电位
CPHA         CLOCK PHASE     时钟相位
        0       SCK时钟的第一个边缘进行数据采集
        1       SCK时钟的第二个边缘进行数据采集

P02.JPG

一般比较常用的似乎是 CPOL = 0 , CPHPA = 0,比如说外接 74HC595 这类的 8 位串行入并行出的移位寄存器就需要做这样的设定,也就是在时钟上升缘时将数据移入寄存器内。

P03.JPG

由于后面我打算连接 MAX7219 显示模块,因此先实现一个 SPI 的测试程序来熟悉一下功能,我使用逻辑分析仪采集数据的输出,程序中让 STM8S001J3 由 SPI 引脚输出 0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80 数据,NSS 引脚由程序控制输出。测试程序中有一个需要注意的地方,由于 MOSI 这支引脚也在 pin8 与烧录使用的 SWIM 同一支脚,因此程序的一开始需要先加上一个 5 秒的延时代码。

SPI 初始化:
  1. SPI_Init(SPI_FIRSTBIT_MSB,           // 高位在前
  2.          SPI_BAUDRATEPRESCALER_2,    // 传输速率为主时钟 1/2
  3.          SPI_MODE_MASTER,            // 主机模式
  4.          SPI_CLOCKPOLARITY_LOW,   // CPOL = 0
  5.          SPI_CLOCKPHASE_1EDGE,       // CPHA = 0
  6.          SPI_DATADIRECTION_2LINES_FULLDUPLEX,   // 全双工模式
  7.          SPI_NSS_SOFT,               // 软件管理 NSS
  8.          0x07);                      // CRC 校验
复制代码


逻辑分析仪数据采集:

P05.JPG

在先前的实验没有留意 STM8S001J3 上电后的系统时钟缺省设定是多少?直觉上一直认为应该是内部 HSI 的 16MHz,而程序中 SPI 的传输速率设定在主时钟的 1/2,因此 SCK 频率应该是 8MHz,但是在逻辑分析仪采集的 SCK 频率却是 1MHz!

P06.JPG

查询规格书看到了这样的说明:

P04.JPG

原来芯片复位 (RESET) 之后的可编程分频器设定在 8,因此主时钟频率就是 2MHz,所以我所采集到的 SCK 频率就是 1MHz 没错。为了得到比较快速的传输速率,我在 main 回圈的开头增加了对时钟设定的函数,将时钟设定在最高的 16MHz。

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  

运行结果也得到了预期的 8MHz:

P07.JPG


一个错误的教训!我一开始是将 CLK_HSIPrescalerConfig() 函数放在延时 5 秒代码之前,然而编程烧录过一次之后的再次编程就失败了!难道这颗芯片变砖了?延时 5 秒的代码是官方提供的,这应该是在主频为 2MHz 的条件下计算的,然而目前在延时 5 秒前我就将主频设定在 16MHz,那是否延时的时间就只剩不到 1 秒呢?原本板子在上电后可以有足够的时间按下 IAR 上的编程动作,现在延时时间减少了,我假如按钮编程的动作快一点的话是否可以就救回这一颗芯片,让芯片可以重新再烧录呢?

在试了很多次之后我放弃了,还好我在 ST 天猫也买了芯片,只好换上芯片后继续后续的实验。

main 回圈:

  1. void main(void)
  2. {
  3.   uint8_t Dta[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
  4.   uint8_t idx = 0;
  5.   
  6.   /* -------------STM8S001 startup-------------- */
  7.   /* delay for SWIM connection: ~5seconds */
  8.   STARTUP_SWIM_DELAY_5S;
  9.   
  10.   /* configure unbonded pins */
  11.   CONFIG_UNUSED_PINS_STM8S001;
  12.   
  13.   GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);     // NSS
  14.   GPIO_WriteHigh(GPIOA, GPIO_PIN_3);
  15.   /* ------------------------------------------- */

  16.   /*High speed internal clock prescaler: 1*/
  17.   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  18.   /* SPI configuration */
  19.   SPI_DeInit();

  20.   /* Initialize SPI in Slave mode  */
  21.   SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW,
  22.            SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,0x07);

  23.   /* Enable the SPI*/
  24.   SPI_Cmd(ENABLE);

  25.   while (1)
  26.   {
  27.     while(SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET);
  28.    
  29.     GPIO_WriteLow(GPIOA, GPIO_PIN_3);   // NSS = 0

  30.     SPI_SendData(Dta[idx++]);
  31.     if(idx == 8) idx = 0;

  32.     GPIO_WriteHigh(GPIOA, GPIO_PIN_3);  // NSS = 1
  33.   }
  34. }
复制代码


源代码:
B07.rar (958 KB, 下载次数: 10)
回复

使用道具 举报

该用户从未签到

100

主题

1255

帖子

191

蝴蝶豆

论坛元老

最后登录
2024-1-26
发表于 2019-2-15 15:29:04 | 显示全部楼层
支持,逻辑分析仪功能比较强大
回复 支持 反对

使用道具 举报

该用户从未签到

26

主题

2070

帖子

6

蝴蝶豆

论坛元老

最后登录
2021-3-31
 楼主| 发表于 2019-2-15 16:40:42 | 显示全部楼层
TLLED 发表于 2019-2-15 15:29
支持,逻辑分析仪功能比较强大

感谢关注
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

65

帖子

0

蝴蝶豆

中级会员

最后登录
2020-10-10
发表于 2019-2-25 14:26:15 | 显示全部楼层
学习学习
回复

使用道具 举报

该用户从未签到

0

主题

1

帖子

0

蝴蝶豆

新手上路

最后登录
2021-3-19
发表于 2021-2-19 15:13:39 | 显示全部楼层
请问使用的IAR版本是哪个呢,它提示我的版本太老了(之前因为我的版本太新,所以换了老版本,现在又太老,这兼容性真实太差了
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-20 05:06 , Processed in 0.165261 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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