void SPI_RFT_Configure(SPI_RFT_low_cb_TypeDef pSpi_cb) { SPI_InitTypeDef InitStructure; Spi_cb = pSpi_cb; SPI_StructInit(&InitStructure); InitStructure.SPI_CPHA = SPI_CPHA_1Edge; // SPI(0,0) InitStructure.SPI_CPOL = SPI_CPOL_Low; InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; // 1.5 MHz InitStructure.SPI_DataSize = SPI_DataSize_16b; // 16 bit InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // Full-duplex InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // MSB first InitStructure.SPI_Mode = SPI_Mode_Master; InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_Init(SPIx,&InitStructure); SPI_NSSInternalSoftwareConfig(SPIx,SPI_NSSInternalSoft_Set); SPI_Cmd(SPIx,ENABLE); SPI_I2S_ITConfig(SPIx,SPI_I2S_IT_RXNE,ENABLE); NVIC_EnableIRQ(SPIx_IRQn); *CS = 1; }
void init_dac(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(DAC_CLOCKING_REGISTER, ENABLE); /* Confugure SCK and MOSI pins as Alternate Function Push Pull */ GPIO_InitStructure.GPIO_Pin = DAC_CLK | DAC_MOSI; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(DAC_PORT, &GPIO_InitStructure); /* Confugure MISO pin as ususal output */ GPIO_InitStructure.GPIO_Pin = DAC_CS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DAC_PORT, &GPIO_InitStructure); GPIO_SetBits(DAC_PORT, DAC_CS); SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(SPI1, &SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); }
void st7735_initGPIO(void){ GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = ST7735_PIN_A0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ST7735_PIN_SCK | ST7735_PIN_SDA; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_Init(ST7735_SPI, &SPI_InitStructure); SPI_Cmd(ST7735_SPI, ENABLE); SPI_NSSInternalSoftwareConfig(ST7735_SPI, SPI_NSSInternalSoft_Set); }
/* Use EXTI Slave - PA4 SPI1_SCK - PA5 21 * SPI1_MISO - PA6 22 * SPI1_MOSI - PA7 23 * Пускай пока скорость будет маленькая 125 КГц примерно */ void SpiInit() { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //For exti //SPI lines GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;//SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_CRCPolynomial = 15; SPI_Init(SPI1, &SPI_InitStructure); SPI_I2S_ITConfig(SPI1,SPI_I2S_IT_RXNE,ENABLE); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); //SPI_SSOutputCmd(SPI1, ENABLE); SPI_Cmd(SPI1, ENABLE); NVIC_EnableIRQ(SPI1_IRQn); //SPI_I2S_SendData(SPI1, 1234); //Init EXTI //EXTI line GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOA, &GPIO_InitStructure); SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource4); EXTI_InitTypeDef exti; exti.EXTI_Line = EXTI_Line4; exti.EXTI_Mode = EXTI_Mode_Interrupt; exti.EXTI_Trigger = EXTI_Trigger_Rising; exti.EXTI_LineCmd = ENABLE; EXTI_Init(&exti); NVIC_EnableIRQ(EXTI4_IRQn); }
void SPI_RC522_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); #if _SPI_RC522_PORT == 1 RCC_APB2PeriphClockCmd(RC522_SPI_CLK ,ENABLE); #elif _SPI_RC522_PORT == 2 RCC_APB1PeriphClockCmd(RC522_SPI_CLK ,ENABLE); #endif RCC_APB2PeriphClockCmd(RC522_SPI_CS_GPIO_CLK, ENABLE); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin =RC522_SPI_CS_PIN ; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RC522_SPI_CS_PORT, &GPIO_InitStructure); RF_Deactivate(); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = RC522_SPI_SCK_PIN | RC522_SPI_MISO_PIN | RC522_SPI_MOSI_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(RC522_SPI_GPIO_PORT, &GPIO_InitStructure); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //полный дуплекс SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_SPEED; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial=7; SPI_Init(RC522_SPI, &SPI_InitStructure); SPI_Cmd(RC522_SPI, ENABLE); SPI_NSSInternalSoftwareConfig(RC522_SPI, SPI_NSSInternalSoft_Set);//надо, что бы stm знал, что он мастер //Reset RCC_APB2PeriphClockCmd(RC522_RST_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = RC522_RST_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(RC522_RST_PORT, &GPIO_InitStructure); GPIO_SetBits(RC522_RST_PORT, RC522_RST_PIN); RF_Deactivate(); }
void SPI_Enable(void) { SPI_Struct_init.SPI_Direction = SPI_Direction_1Line_Tx ; SPI_Struct_init.SPI_Mode = SPI_Mode_Master; SPI_Struct_init.SPI_DataSize = SPI_DataSize_16b; SPI_Struct_init.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_Struct_init.SPI_NSS = SPI_NSS_Soft; SPI_Struct_init.SPI_CPOL = SPI_CPOL_Low; SPI_Init(SPI1,&SPI_Struct_init); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); SPI_Cmd(SPI1, ENABLE); };
// SPI initialization with given prescaler void nRF24_SPI_Init(uint16_t prescaler) { SPI_InitTypeDef SPI; SPI.SPI_Mode = SPI_Mode_Master; SPI.SPI_BaudRatePrescaler = prescaler; SPI.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI.SPI_CPOL = SPI_CPOL_Low; SPI.SPI_CPHA = SPI_CPHA_1Edge; SPI.SPI_CRCPolynomial = 7; SPI.SPI_DataSize = SPI_DataSize_8b; SPI.SPI_FirstBit = SPI_FirstBit_MSB; SPI.SPI_NSS = SPI_NSS_Soft; SPI_Init(SPI_PORT,&SPI); // NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode). SPI_NSSInternalSoftwareConfig(SPI_PORT,SPI_NSSInternalSoft_Set); }
void dw1000_ioset(void) { GPIO_InitTypeDef gpio_init; //dw1000 相关引脚初始化 gpio_init.GPIO_Pin = DW1000_RSTn; //DW1000复位引脚 gpio_init.GPIO_Mode = GPIO_Mode_AIN; gpio_init.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(DW1000_DATA_PORT, &gpio_init); //GPIO_SetBits(DW1000_DATA_PORT, DW1000_RSTn); gpio_init.GPIO_Pin = DW1000_CS; //DW1000片选引脚 gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; gpio_init.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(DW1000_DATA_PORT, &gpio_init); GPIO_SetBits(DW1000_DATA_PORT, DW1000_CS); gpio_init.GPIO_Pin = DW1000_SCK | DW1000_MOSI; //DW1000 SPI时钟和MOSI引脚 gpio_init.GPIO_Mode = GPIO_Mode_AF_PP; gpio_init.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_DATA_PORT, &gpio_init); gpio_init.GPIO_Pin = DW1000_MISO; //DW1000 MISO引脚 gpio_init.GPIO_Mode = GPIO_Mode_AF_OD; gpio_init.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(DW1000_DATA_PORT, &gpio_init); gpio_init.GPIO_Pin = DW1000_WAK; //DW1000唤醒引脚 gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; gpio_init.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(DW1000_CTRL_PORT, &gpio_init); GPIO_ResetBits(DW1000_DATA_PORT, DW1000_WAK); gpio_init.GPIO_Pin = DW1000_IRQn; //DW1000中断引脚 gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING; gpio_init.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(DW1000_CTRL_PORT, &gpio_init); GPIO_EXTILineConfig(DW1000_INT_PORT, DW1000_INT_PIN); //SPI初始化 BSP_DWTSpiSet(DW1000_SLOW_SPEED); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); }
void SPI_Initialize() { SPI_RCC_Configuration(); SPI_GPIO_Configuration(SPI_Mode_Master); SPI_InitTypeDef SPI_InitStructure; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_Init(NRF_SPI, &SPI_InitStructure); SPI_Cmd(NRF_SPI, ENABLE); SPI_NSSInternalSoftwareConfig(NRF_SPI, SPI_NSSInternalSoft_Set); }
void init_SPI(void) { SPI_InitTypeDef SPI_InitStructure; SPI_StructInit(&SPI_InitStructure); SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_Init(NRF24L01_SPI,&SPI_InitStructure); // NSS must be set to '1' due to NSS_Soft settings (otherwise it will be Multimaster mode). SPI_NSSInternalSoftwareConfig(NRF24L01_SPI,SPI_NSSInternalSoft_Set); NRF24L01_CSN_HIGH; NRF24L01_CE_LOW; SPI_Cmd(NRF24L01_SPI,ENABLE); }
void SPI_Config(void) { SPI_GPIO_Config(); SPI_InitTypeDef SPI_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); SPI_I2S_DeInit(SPI3); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 0; SPI_Init(SPI3, &SPI_InitStructure); SPI_SSOutputCmd(SPI3,DISABLE); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); SPI_Cmd(SPI3, ENABLE); SPI3->DR = DLE; }
uint16_t lcd_init(framebuffer_t *framebuffer, lcd_wait_func_t wait_func) { uint16_t i; // use framebuffer lcd_state.framebuffer = framebuffer; // scrolling is on by default, if we have a framebuffer // UTF-8 is on by default, because I use Eclipse lcd_state.flags = framebuffer != NULL ? LCD_FLAG_SCROLL|LCD_FLAG_UTF8CYR : LCD_FLAG_UTF8CYR; // use user :) wait function or default one lcd_state.wait_func = wait_func == NULL ? lcd_dumb_wait : wait_func; // init clocks RCC_APB2PeriphClockCmd(LCD_SPI_CLK, ENABLE); RCC_AHBPeriphClockCmd(LCD_GPIO_CLK, ENABLE); /* * init GPIOs. * since there be no reading, MISO is not used, * and pin is configured as output GPIO for RESET signal */ // switch SCK and MOSI pins to alternate function GPIO_PinAFConfig(LCD_PORT, LCD_SCK_PIN_NUM, GPIO_AF_0); GPIO_PinAFConfig(LCD_PORT, LCD_MOSI_PIN_NUM, GPIO_AF_0); // set common parameters lcd_gpio_config.GPIO_Mode = GPIO_Mode_AF; lcd_gpio_config.GPIO_OType = GPIO_OType_PP; lcd_gpio_config.GPIO_PuPd = GPIO_PuPd_NOPULL; lcd_gpio_config.GPIO_Speed = GPIO_Speed_50MHz; // config SCK pin lcd_gpio_config.GPIO_Pin = LCD_SCK_PIN; GPIO_Init(LCD_PORT, &lcd_gpio_config); // config MOSI pin lcd_gpio_config.GPIO_Pin = LCD_MOSI_PIN; GPIO_Init(LCD_PORT, &lcd_gpio_config); // config MISO pin lcd_gpio_config.GPIO_Mode = GPIO_Mode_OUT; lcd_gpio_config.GPIO_Pin = LCD_RESET_PIN; GPIO_Init(LCD_PORT, &lcd_gpio_config); /* * init SPI * hell bunch of configurations :-\ */ // just in case SPI_I2S_DeInit(LCD_SPI); // config SPI lcd_spi_config.SPI_Direction = SPI_Direction_1Line_Tx; lcd_spi_config.SPI_Mode = SPI_Mode_Master; lcd_spi_config.SPI_DataSize = SPI_DataSize_9b; lcd_spi_config.SPI_CPOL = SPI_CPOL_Low; lcd_spi_config.SPI_CPHA = SPI_CPHA_1Edge; // lcd_spi_config.SPI_CPOL = SPI_CPOL_High; // lcd_spi_config.SPI_CPHA = SPI_CPHA_2Edge; lcd_spi_config.SPI_NSS = SPI_NSS_Soft; lcd_spi_config.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; lcd_spi_config.SPI_FirstBit = SPI_FirstBit_MSB; lcd_spi_config.SPI_CRCPolynomial = 7; // ? SPI_Init(LCD_SPI, &lcd_spi_config); // enable NSS SPI_NSSInternalSoftwareConfig(LCD_SPI, SPI_NSSInternalSoft_Set); // enable SPI SPI_Cmd(LCD_SPI, ENABLE); // finally, send RESET signal GPIO_ResetBits(LCD_PORT, LCD_RESET_PIN); lcd_state.wait_func(5); // let RESET last 5 msec! GPIO_SetBits(LCD_PORT, LCD_RESET_PIN); // // send Reading Mode command // lcd_write_command(0xdb); // // switch SPI to read // SPI_BiDirectionalLineConfig(LCD_SPI, SPI_Direction_Rx); // while(SPI_GetReceptionFIFOStatus(LCD_SPI) < SPI_ReceptionFIFOStatus_HalfFull); // data = SPI_I2S_ReceiveData16(LCD_SPI); // // switch SPI back to write // SPI_BiDirectionalLineConfig(LCD_SPI, SPI_Direction_Tx); // send command of internal display reset lcd_write_command(0xE2); // wait... lcd_state.wait_func(20); // send init commands to display for(i = 0; i < sizeof(lcd_init_sequence); i++) lcd_write_command(lcd_init_sequence[i]); return 0; }