OpenEdv-开源电子网

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

429的SPI2双线只接收模式读取ADC芯片的数据

[复制链接]

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
发表于 2018-11-24 13:39:07 | 显示全部楼层 |阅读模式
1金钱
求教各位大大,我现在用429的SPI2来读取外部ADC的数据,使用的是SPI主模式,双线只接收,然后ADC芯片是ADS8860;
问题是:1.关于SPI这边我怎么配置?由于只用了接收,但是我配置的是双线只接收,也就是用的是SPI2的MISO,SCLK和NSS,ADS8860具有片选的功能,
2.关于SPI的NSS,求详细的解说,软件管理,硬件管理。后面贴上初始化代码

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 13:41:53 | 显示全部楼层


void adc_spi2_Init(void)
{
       

       
        __HAL_RCC_GPIOB_CLK_ENABLE();
        __HAL_RCC_SPI2_CLK_ENABLE();
       
        GPIO_InitTypeDef GPIO_Struct;
        GPIO_Struct.Pin = GPIO_PIN_13|GPIO_PIN_14;
        GPIO_Struct.Mode = GPIO_MODE_AF_PP;
        GPIO_Struct.Pull = GPIO_PULLUP;
        GPIO_Struct.Speed = GPIO_SPEED_FAST;
        GPIO_Struct.Alternate = GPIO_AF5_SPI2;
        HAL_GPIO_Init(GPIOB,&GPIO_Struct);
       
        /*SPI23õê¼»ˉ-----------------------------------------------*/
       
        SPI2_Handler.Instance = SPI2;
        SPI2_Handler.Init.Mode = SPI_MODE_MASTER;                                                                                                                                                                                       
        SPI2_Handler.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;                                                                               
        SPI2_Handler.Init.DataSize = SPI_DATASIZE_16BIT;                                                                                                                                                               
        SPI2_Handler.Init.CLKPolarity = SPI_POLARITY_HIGH;                                                                                                                                                       
        SPI2_Handler.Init.CLKPhase = SPI_PHASE_2EDGE;                                                                                                                                                                       
        SPI2_Handler.Init.NSS = SPI_NSS_SOFT;                                                                                                                                                                                      
        SPI2_Handler.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;                         
        SPI2_Handler.Init.FirstBit = SPI_FIRSTBIT_MSB;                                                                                                                                                                                       
        SPI2_Handler.Init.TIMode = SPI_TIMODE_DISABLE;                                                                                                                                                                               
        SPI2_Handler.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
        SPI2_Handler.Init.CRCPolynomial = 7;
        HAL_SPI_Init(&SPI2_Handler);
       
        __HAL_SPI_ENABLE(&SPI2_Handler);
       
}
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 13:48:01 | 显示全部楼层
附件是原理图和时序图

原理图

原理图

ADC时序图

ADC时序图
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 13:50:01 | 显示全部楼层
现在调用HAL库的接收函数程序跳到通信超时那里去了
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 13:51:16 | 显示全部楼层
如果我初始化没有什么问题,那我该怎么接收数据?
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 14:03:31 | 显示全部楼层




uint16_t Read_2Byte_spi2(void)
{
        uint16_t Rxdata = 0;
        HAL_SPI_Receive(&SPI2_Handler, (uint8_t*)&Rxdata,1, 10000);
        return Rxdata;
}
调用的库函数
回复

使用道具 举报

19

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2018-11-6
在线时间
58 小时
 楼主| 发表于 2018-11-24 14:16:09 | 显示全部楼层
该怎么管理NSS引脚啊?看ADC的时序图,CONVST先拉高,等待tCONV-MAX时间后拉低,拉低的同时启动SPI,但是这个NSS应该如何管理成这样操作呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 05:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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