N32WB452LEQ6芯片SPI2基础应用驱动程序(SCK: PC7,MISO:PC8,MOSI:PC9,NSS:PC6)

系统供电3.3V,该驱动主要应用在WQ25QXX芯片驱动,NSS选择软件控制,配合WQ25QXX芯片片选CS时序应用。芯片官网DEMO程序有相关的SPI例程,但所用IO口可能不同,设置参数,端口复用也略不相同,为了以后直接应用,仅做记录,方便以后移植应用,同样,前面是头文件代码,后面是应用代码,代码已测试。

#ifndef __SPI2_H__

#define __SPI2_H__

#include "main.h"

#define SPI2_CS(n)  (n?GPIO_SetBits(GPIOC, GPIO_PIN_6):GPIO_ResetBits(GPIOC, GPIO_PIN_6))



 

void spi2Init(void); //spi2 gpio and mode initial

uint8_t spi2ReadWriteByte(uint8_t byte);  //SPI2 read and write a byte.

#endif

#include "spi2.h"

void spi2Init(void) //spi2 gpio and mode initial

{    

    //SPI2 GPIO initial

    GPIO_InitType GPIO_InitStructure;

    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOC, ENABLE); //PORT C CLK ENABLE

    //RCC_EnableAPB2PeriphClk(sFLASH_SPI_CLK, ENABLE);

    RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_SPI2, ENABLE);//SPI2 CLK ENABLE APB1    

    GPIO_ConfigPinRemap(GPIO_RMP1_SPI2,ENABLE);           //IO 复用AFIO_RMP_CFG3

    GPIO_InitStructure.Pin        = GPIO_PIN_7;            //SCK

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;

    GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.Pin = GPIO_PIN_9;       //MOSI Master Output/Slave Input

    GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.Pin       = GPIO_PIN_8;  //MISO Master Input Slave Output 主机输入从机输出

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.Pin       = GPIO_PIN_6;   //CS

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure);    

   

    SPI2_CS(1);    //sFLASH_CS_HIGH();

    SPI_InitType SPI_InitStructure;

    SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;  //SPI direction: double

    SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;                //SPI MODE master

    SPI_InitStructure.DataLen       = SPI_DATA_SIZE_8BITS;            //SPI DATA MODE

    SPI_InitStructure.CLKPOL        = SPI_CLKPOL_HIGH;                //SPI CLE idle mode is HIGH

    SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;         //串行同步时钟的第二个跳变沿(上升或下降)数据被采样

    SPI_InitStructure.NSS           = SPI_NSS_SOFT;                   //CS soft control

    SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_2;      

    // SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_4;              //Baud rate predivision: SPI_BR_PRESCALER_4 APB1 = 36MHZ SPC CLE = 36/4 = 9MHZ

    // SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_16;

    // SPI_InitStructure.BaudRatePres = SPI_BR_PRESCALER_64;              //Baud rate predivision: SPI_BR_PRESCALER_4 APB1 = 36MHZ SPC CLE = 36/4 = 9MHZ

    SPI_InitStructure.FirstBit = SPI_FB_MSB;                          //FirstBit :MSB most significant bit

    SPI_InitStructure.CRCPoly  = 7;                                   //CRC

    SPI_Init(SPI2, &SPI_InitStructure);

    SPI_Enable(SPI2, ENABLE);  

}

uint8_t spi2ReadWriteByte(uint8_t byte)  //SPI2 read and write a byte.

{

    while (SPI_I2S_GetStatus(SPI2, SPI_I2S_TE_FLAG) == RESET){}

    SPI_I2S_TransmitData(SPI2, byte);

    while (SPI_I2S_GetStatus(SPI2, SPI_I2S_RNE_FLAG) == RESET){}

    return SPI_I2S_ReceiveData(SPI2);

}

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevinpan2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值