STM32与CR95HF模块的通信问题
本帖最后由 西奥伟 于 2019-2-25 11:46 编辑MCU:STM32F030C8 外设模块:CR95HF芯片
采用通信协议:SPI通信
问题:使用STM32F030C8型号的MCU,最初将CR95HF的官方的实例库的代码,移植到自己的项目当中来,官方库使用的MCU为STM32F103RB系列的,官方库初始化CPOL=1,CPHA=1 的模式,我按照官方库对比了SPI通信的4个通信引脚的设置分别如下:
官方库: (GPIO复用为SPI1)
SCK: PA5---->GPIO_MODE_AF_PP(上拉)
MOSI: PA7---->GPIO_MODE_AF_PP(下拉)
MISO: PA6---->(上拉)
NSS: PB6---->GPIO_MODE_OUTPUT_PP(无上下拉)
IRQIN:PA9---->GPIO_MODE_OUTPUT_PP
IRQOUT: PA10---->GPIO_MODE_IT_FALLING(上拉)
本人项目:(GPIO复用为SPI2)
SCK: PB13--->GPIO_MODE_AF_PP(上拉)
MOSI: PB14---->GPIO_MODE_AF_PP(下拉)
MISO: PB15----->GPIO_MODE_AF_PP(上拉)
NSS: PB12------> GPIO_MODE_OUTPUT_PP(无上下拉)
IRQIN: PF7------>GPIO_MODE_OUTPUT_PP(无上下拉)
IRQOUT: PB11----->GPIO_MODE_IT_FALLING(上拉)
现在出现问题的现象是:CR95HF模块初始化不成功,假如将MOSI引脚设置为下拉模式,则当使用库函数HAL_SPI_TransmitReceive()向CR95HF模块发送复位命令,接收到的值为0x00。倘若将MOSI引脚设置为上拉模式,则当使用库函数HAL_SPI_TransmitReceive()向CR95HF模块发送复位命令,接收到的值为0xFF。
接收到的数据,不是CR95HF模块正常初始化响应的数据,使用示波器检测CR95HF芯片的晶振是起振了的,示波器打SCK引脚也有方波出现。
问题已解决:经过重新查找问题,是由于硬件SPI的GPIO引脚是底层已经做好了的,但是,我自己将MISO和MOSI引脚配置相反了,最后,导致SPI2中的SCK引脚没有产生方波。
注意点:、
①stm32硬件SPI的对应组编号SPI1和SPI2、以及SPI的GPIO引脚,需要根据数据手册一一对应。
②SPI1和SPI2挂载的外设时钟APB线不一样,SPI1--》APB2,SPI2--》APB1。
总结:利用示波器测试SPI的SCK引脚,根据SCK引脚是否产生方波,来确定SPI的初始化配置是否成功。
页:
[1]