4116|3

6841

帖子

11

TA的资源

版主

楼主
 

【国民技术N32G457评测】SPI收发评测 [复制链接]

 

来回好几天,终于把SPI通讯的测试通过:

一、测试的思路:spi1做发送,spi2做接收。发送32位数据,接收到后判断是否正确。

二、接线:   

SPI1 NSS  (PA4) —— SPI2 NSS(PB12)

SPI1 SCK  (PA5) —— SPI2 SCK (PB13)

SPI1 MISO(PA6) —— SPI2 MOSI(PB15)

SPI1 MOSI(PA7) —— SPI2 MISO(PB14)备注:交叉接

三、初始化时钟:

1、初始化spi总线时钟为RCC_HCLK_DIV2;

2、使能APB2的GPIO、SPI的时钟;

3、使能APB1的GPIO时钟。

四、初始化GPIO:

1、将主spi的SCK、MOSI配置为高速输出。

2、将从SPI的SCK配置为输入,MISO配置为输入模式。

五、中断配置:

使能SPI1、SPI2的中断。同时在n32g45x_it.c中新建SPI1_IRQHandler、SPI2_IRQHandler函数,用于发送与接收。

六、配置串口1,用于输入结果。

七、配置SPI1、SPI2:

    /* SPI_MASTER configuration ------------------------------------------------*/
    SPI_InitStructure.DataDirection = SPI_DIR_SINGLELINE_TX;  //单向的数据模式
    SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;        //主
    SPI_InitStructure.DataLen       = SPI_DATA_SIZE_8BITS;    	//设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.CLKPOL        = SPI_CLKPOL_LOW;         //串行同步时钟的空闲状态为低电平 
    SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;  //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.NSS           = SPI_NSS_HARD;           //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.BaudRatePres  = SPI_BR_PRESCALER_256;     //定义波特率预分频的值:波特率预分频值为256 
    SPI_InitStructure.FirstBit      = SPI_FB_MSB;             //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.CRCPoly       = 7;                      //CRC值计算的多项式
    SPI_Init(SPI_MASTER, &SPI_InitStructure);

    /* SPI_SLAVE configuration -------------------------------------------------*/
    SPI_InitStructure.DataDirection = SPI_DIR_SINGLELINE_RX;
    SPI_InitStructure.SpiMode       = SPI_MODE_SLAVE;
    SPI_Init(SPI_SLAVE, &SPI_InitStructure);
		SPI_SSOutputEnable(SPI_MASTER, ENABLE); //硬件管理NSS管脚,要使能这个参数
    /* Enable SPI_MASTER TXE interrupt */
    SPI_I2S_EnableInt(SPI_MASTER, SPI_I2S_INT_TE, ENABLE);
    /* Enable SPI_SLAVE RXNE interrupt */
    SPI_I2S_EnableInt(SPI_SLAVE, SPI_I2S_INT_RNE, ENABLE);

    /* Enable SPI_SLAVE */
    SPI_Enable(SPI_SLAVE, ENABLE);
    /* Enable SPI_MASTER */
    SPI_Enable(SPI_MASTER, ENABLE);

八、测试方法:

1、先禁止传输中断,把数据拷到发送缓存数组,清空接收数组,再开启传输中断。

2、核对收发的数组内存,如果是一至则打印出PASS。

九、测试结果:

  十、遇到的问题:

原来我在官方提供的例子上测试,但是总有些时候接收到的是乱码,起先是怀疑是不是我的杜邦线有问题,或者是接触不好,于是换了线等等都是效果不好,最后我改写到while里面来测试才能通过。建议官方写例子最好自己也测试通过一下。免得象我多花了好些时间。还有就是DMA的测试也不是很成功。

十一、下一步测试打算

用RT_Thread Studio来做测试的DEMO。

 

 

SPI_demo.7z

884.95 KB, 下载次数: 410

最新回复

有什么软件可以配置底层函数的吗   详情 回复 发表于 2022-12-5 11:06
点赞(1) 关注
 
 

回复
举报

9717

帖子

24

TA的资源

版主

沙发
 

SPI时钟是多少MHz?

 
 
 

回复

6841

帖子

11

TA的资源

版主

板凳
 
本帖最后由 lugl4313820 于 2022-2-7 07:42 编辑
littleshrimp 发表于 2022-2-7 00:32 SPI时钟是多少MHz?

总线36M、256分频:

/* PCLK2 = HCLK/2 */
SPI_InitStructure.BaudRatePres  = SPI_BR_PRESCALER_256;     //定义波特率预分频的值:波特率预分频值为256  RCC_ConfigPclk2(RCC_HCLK_DIV2);

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 

有什么软件可以配置底层函数的吗

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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