当前位置:首页 > 单片机 > 单片机
[导读]void SPI_Init(void){ GPIO_InitTypeDef GPIO_InitStruct; SPI_InitTypeDef SPI_InitStruct; /*!< SPI_CS_GPIO, SPI_MOSI_GPIO, SPI_MISO_GPIO, SPI_SCK_GPIO Init */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF|

void SPI_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

SPI_InitTypeDef SPI_InitStruct;

/*!< SPI_CS_GPIO, SPI_MOSI_GPIO, SPI_MISO_GPIO, SPI_SCK_GPIO Init */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF| RCC_AHBPeriph_GPIOB, ENABLE);

RCC_APB1PeriphClockCmd(FLASH_SPI2, ENABLE);

/*!< Configure SPI pins: SCK */

GPIO_InitStruct.GPIO_Pin = SCK_PIN;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;

GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;

GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(SCK_PORT, &GPIO_InitStruct);

/*!< Configure SPI pins: MISO */

GPIO_InitStruct.GPIO_Pin = MISO_PIN;

GPIO_Init(MISO_PORT, &GPIO_InitStruct);

/*!< Configure SPI pins: MOSI */

GPIO_InitStruct.GPIO_Pin =MOSI_PIN;

GPIO_Init(MOSI_PORT, &GPIO_InitStruct);

/* Connect PXx to SPI_SCK */

GPIO_PinAFConfig( SCK_PORT, SCK_PIN, GPIO_AF_0);

/* Connect PXx to SPI_MISO */

GPIO_PinAFConfig( MISO_PORT, MISO_PIN, GPIO_AF_0);

/* Connect PXx to SPI_MOSI */

GPIO_PinAFConfig( MOSI_PORT, MOSI_PIN, GPIO_AF_0);

/*!< Configure SPI_CS_PIN pin: */

GPIO_InitStruct.GPIO_Pin = SPI_CS_PIN;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;

GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;

GPIO_Init( SPI_CS _PORT, &GPIO_InitStruct);

SPI_FLASH_CS_HIGH();

/*!< SD_SPI Config */

SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

SPI_InitStruct.SPI_Mode = SPI_Mode_Master;

SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;

SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; //软件设定NSS位

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStruct.SPI_CRCPolynomial = 7;

SPI_Init(SPI2, &SPI_InitStruct);

SPI_RxFIFOThresholdConfig(SPI2, SPI_RxFIFOThreshold_QF);

SPI_Cmd(SPI2, ENABLE); /*!< SD_SPI enable */


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在Linux环境下的C语言编程中,函数的可重入性(Reentrancy)是一个至关重要的概念。它直接关系到多线程或多任务环境下程序的稳定性和可靠性。所谓可重入函数,是指一个函数可以被多个线程或任务安全地调用,而不会导致数...

关键字: Linux 库函数

这篇文章想分享笔者在嵌入式开发过程中常用的库函数,他们的使用方法,使用场景,使用好处以及头文件位置。1#include一般我在写C代码的时候都会包含此头文件,因为一旦包含此文件后,你就可以畅快的使用bool数据类型,而不...

关键字: 库函数

关注、星标公众号,直达精彩内容来源:知乎作者:Clarence这篇文章想分享笔者在嵌入式开发过程中常用的库函数,他们的使用方法,使用场景,使用好处以及头文件位置。1#include一般我在写C代码的时候都会包含此头文件,...

关键字: 库函数

基本概念阐述memcpy和memmove都是C语言的库函数,相比于 strcpy和 strncpy只能针对于字符类型的数组(),这两个函数可以拷贝其他类型的数组,对于 memcpy和 memmove的区别是什么呢?这里,...

关键字: 库函数 ov

在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容。

关键字: 嵌入式 C语言 库函数

单片机编程软件的使用频率极高,采用单片机编程软件,可制造诸多系统。对于单片机编程软件,小编做过诸多介绍。本文对于单片机编程软件的介绍基于Keil,主要在于介绍该单片机编程软件是如何处理库函数以及寄存器的关系的。

关键字: 单片机编程软件 库函数 指数

杂记asla-lib库函数snd_pcm_open打开流程浅析ac97声卡intel8x0的DMA内存substream->dma_buffer什么时候被赋值浅析ac97声卡intel8x0的r

关键字: playback 库函数

stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。窗口看门狗,所以称之为窗口就是因为

关键字: STM32 库函数 操作寄存器 窗口看门狗

首先,I2C总线由两条线——串行数据(SDA)和串行时钟(SCL),这是同步通信,也是半双工通信,不能同时读写。每个器件都有一个唯一的地址识别,当总线空闲时I2C两条线都是高电平,只有当连接到总线的器件的输出级是

关键字: i2c stm32f429 库函数 读取eeprom

stm32f103最少有2个AD模数转换器,每个ADC都有18个通道,可以测量16个外部和2个内部模拟量。最大转换频率为1Mhz,也就是转换时间为1us(在 ADCCLK = 14Mhz,采样周期为1.5个时钟周期时)。...

关键字: STM32 库函数 操作寄存器 ad模数转换
关闭