/* SSP2 SPI2_MOSI: P5.0 SPI2_MISO: P5.1 SPI2_SCK : P5.2 CS1: P0.20 TOUCH */ int rt_hw_spi_init(void) { /* register spi bus */ { static struct lpc_spi_bus lpc_spi1; lpc_spi_register(LPC_SSP1, &lpc_spi1, "spi1"); LPC_IOCON->P4_20 &= ~0x07; LPC_IOCON->P4_20 |= 0x03; LPC_IOCON->P4_22 &= ~0x07; LPC_IOCON->P4_22 |= 0x03; LPC_IOCON->P4_23 &= ~0x07; LPC_IOCON->P4_23 |= 0x03; } /* attach cs */ { static struct rt_spi_device spi_device; static struct lpc_spi_cs spi_cs1; /* spi10: P4.21 */ LPC_IOCON->P4_21 &= ~0x07; spi_cs1.port = LPC_GPIO4; spi_cs1.pin = 21; spi_cs1.port->DIR |= (0x01 << spi_cs1.pin); spi_cs1.port->SET |= (0x01 << spi_cs1.pin); rt_spi_bus_attach_device(&spi_device, "spi10", "spi1", (void *)&spi_cs1); } /* register spi bus */ { static struct lpc_spi_bus lpc_spi0; lpc_spi_register(LPC_SSP0, &lpc_spi0, "spi0"); LPC_IOCON->P2_22 = 0xa2; LPC_IOCON->P2_26 = 0xa2; LPC_IOCON->P2_27 = 0xa2; } /* attach cs */ { static struct rt_spi_device spi_device; static struct lpc_spi_cs spi_cs1; /* spi20: P2.23 */ LPC_IOCON->P2_23 &= ~0x07; spi_cs1.port = LPC_GPIO2; spi_cs1.pin = 23; spi_cs1.port->DIR |= (0x01 << spi_cs1.pin); spi_cs1.port->SET |= (0x01 << spi_cs1.pin); rt_spi_bus_attach_device(&spi_device, "spi00", "spi0", (void *)&spi_cs1); } /* attach cs */ { static struct rt_spi_device spi_device; static struct lpc_spi_cs spi_cs1; /* spi20: P2.24 */ LPC_IOCON->P2_24 &= ~0x07; spi_cs1.port = LPC_GPIO2; spi_cs1.pin = 24; spi_cs1.port->DIR |= (0x01 << spi_cs1.pin); spi_cs1.port->SET |= (0x01 << spi_cs1.pin); rt_spi_bus_attach_device(&spi_device, "spi01", "spi0", (void *)&spi_cs1); } return 0; }
rt_err_t wm_spi_bus_attach_device(const char *bus_name, const char *device_name, rt_uint32_t pin) { rt_err_t ret; rt_int16_t gpio_pin; struct rt_spi_device *spi_device; struct wm_sw_spi_cs *cs_pin; gpio_pin = wm_get_pin(pin); if (gpio_pin == WM_PIN_DEFAULT) { return -RT_ERROR; } spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); RT_ASSERT(spi_device != RT_NULL); cs_pin = (struct wm_sw_spi_cs *)rt_malloc(sizeof(struct wm_sw_spi_cs)); RT_ASSERT(cs_pin != RT_NULL); cs_pin->pin = gpio_pin; tls_gpio_cfg((enum tls_io_name)gpio_pin, WM_GPIO_DIR_OUTPUT, WM_GPIO_ATTR_PULLHIGH); tls_gpio_write((enum tls_io_name)gpio_pin, 1); ret = rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin); return ret; }
/* SPI2_MOSI: PB15 SPI2_MISO: PB14 SPI2_SCK : PB13 CS0: PG10 SPI FLASH CS1: PB12 TOUCH CS2: PG7 WIFI */ static void rt_hw_spi2_init(void) { /* register spi bus */ { static struct stm32_spi_bus stm32_spi; stm32_spi_register(SPI2, &stm32_spi, "spi2"); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi21: PB12 */ spi_cs.GPIOx = GPIOB; spi_cs.GPIO_Pin = GPIO_Pin_12; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi20", "spi2", (void*)&spi_cs); } }
//cannot be used before completion init rt_err_t stm32_spi_bus_attach_device(rt_uint32_t pin,const char * bus_name,const char * device_name) { struct rt_spi_device * spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); RT_ASSERT(spi_device != RT_NULL); struct stm32_hw_spi_cs * cs_pin = (struct stm32_hw_spi_cs *)rt_malloc(sizeof(struct stm32_hw_spi_cs)); RT_ASSERT(cs_pin != RT_NULL); cs_pin->pin = pin; rt_pin_mode(pin,PIN_MODE_OUTPUT); rt_pin_write(pin, 1); return rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin); }
/** * @brief This function attach device to QSPI bus. * @param device_name QSPI device name * @param pin QSPI cs pin number * @param data_line_width QSPI data lines width, such as 1, 2, 4 * @param enter_qspi_mode Callback function that lets FLASH enter QSPI mode * @param exit_qspi_mode Callback function that lets FLASH exit QSPI mode * @retval 0 : success * -1 : failed */ rt_err_t stm32_qspi_bus_attach_device(const char *bus_name, const char *device_name, rt_uint32_t pin, rt_uint8_t data_line_width, void (*enter_qspi_mode)(), void (*exit_qspi_mode)()) { struct rt_qspi_device *qspi_device = RT_NULL; struct stm32_hw_spi_cs *cs_pin = RT_NULL; rt_err_t result = RT_EOK; RT_ASSERT(bus_name != RT_NULL); RT_ASSERT(device_name != RT_NULL); RT_ASSERT(data_line_width == 1 || data_line_width == 2 || data_line_width == 4); qspi_device = (struct rt_qspi_device *)rt_malloc(sizeof(struct rt_qspi_device)); if (qspi_device == RT_NULL) { LOG_E("no memory, qspi bus attach device failed!"); result = RT_ENOMEM; goto __exit; } cs_pin = (struct stm32_hw_spi_cs *)rt_malloc(sizeof(struct stm32_hw_spi_cs)); if (qspi_device == RT_NULL) { LOG_E("no memory, qspi bus attach device failed!"); result = RT_ENOMEM; goto __exit; } qspi_device->enter_qspi_mode = enter_qspi_mode; qspi_device->exit_qspi_mode = exit_qspi_mode; qspi_device->config.qspi_dl_width = data_line_width; cs_pin->Pin = pin; #ifdef BSP_QSPI_USING_SOFTCS rt_pin_mode(pin, PIN_MODE_OUTPUT); rt_pin_write(pin, 1); #endif result = rt_spi_bus_attach_device(&qspi_device->parent, device_name, bus_name, (void *)cs_pin); __exit: if (result != RT_EOK) { if (qspi_device) { rt_free(qspi_device); } if (cs_pin) { rt_free(cs_pin); } } return result; }
static int rt_hw_spi5_init(void) { /* register spi bus */ { GPIO_InitTypeDef GPIO_InitStructure; rt_err_t result; __HAL_RCC_GPIOF_CLK_ENABLE(); GPIO_InitStructure.Alternate = GPIO_AF5_SPI5; GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; GPIO_InitStructure.Pull = GPIO_PULLUP; GPIO_InitStructure.Speed = GPIO_SPEED_FAST; GPIO_InitStructure.Pin = GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9; HAL_GPIO_Init(GPIOF, &GPIO_InitStructure); result = stm32_spi_bus_register(SPI5, "spi5"); if (result != RT_EOK) { return result; } } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; rt_err_t result; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStructure.Pull = GPIO_PULLUP; GPIO_InitStructure.Speed = GPIO_SPEED_FAST; spi_cs.GPIOx = GPIOF; spi_cs.GPIO_Pin = GPIO_PIN_6; //__HAL_RCC_GPIOF_CLK_ENABLE(); GPIO_InitStructure.Pin = spi_cs.GPIO_Pin; HAL_GPIO_WritePin(spi_cs.GPIOx, spi_cs.GPIO_Pin, GPIO_PIN_SET); HAL_GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); result = rt_spi_bus_attach_device(&spi_device, "spi50", "spi5", (void*)&spi_cs); if (result != RT_EOK) { return result; } } return RT_EOK; }
static void rt_hw_spi1_init(void) { /* register spi bus */ { static struct stm32_spi_bus stm32_spi; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*!< SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Connect alternate function */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); stm32_spi_register(SPI1, &stm32_spi, "spi1"); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi21: PG10 */ spi_cs.GPIOx = GPIOE; spi_cs.GPIO_Pin = GPIO_Pin_3; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "MOTION", "spi1", (void*)&spi_cs); } }
static int rt_hw_spi5_init(void) { /* register spi bus */ { rt_err_t result; rcu_periph_clock_enable(RCU_GPIOG); rcu_periph_clock_enable(RCU_SPI5); /* SPI5_CLK(PG13), SPI5_MISO(PG12), SPI5_MOSI(PG14),SPI5_IO2(PG10) and SPI5_IO3(PG11) GPIO pin configuration */ gpio_af_set(GPIOG, GPIO_AF_5, GPIO_PIN_10|GPIO_PIN_11| GPIO_PIN_12|GPIO_PIN_13| GPIO_PIN_14); gpio_mode_set(GPIOG, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_10|GPIO_PIN_11| GPIO_PIN_12|GPIO_PIN_13| GPIO_PIN_14); gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_200MHZ, GPIO_PIN_10|GPIO_PIN_11| GPIO_PIN_12|GPIO_PIN_13| GPIO_PIN_14); result = gd32_spi_bus_register(SPI5, SPI_BUS_NAME); if (result != RT_EOK) { return result; } } /* attach cs */ { static struct rt_spi_device spi_device; static struct gd32_spi_cs spi_cs; rt_err_t result; spi_cs.GPIOx = GPIOG; spi_cs.GPIO_Pin = GPIO_PIN_9; /* SPI5_CS(PG9) GPIO pin configuration */ gpio_mode_set(GPIOG, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_9); gpio_output_options_set(GPIOG, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); gpio_bit_set(GPIOG,GPIO_PIN_9); result = rt_spi_bus_attach_device(&spi_device, SPI_FLASH_DEVICE_NAME, SPI_BUS_NAME, (void*)&spi_cs); if (result != RT_EOK) { return result; } } return RT_EOK; }
/* * SPI1_MOSI: PA7 * SPI1_MISO: PA6 * SPI1_SCK : PA5 * * CS0: PA4 SD card. */ static void rt_hw_spi_init(void) { #ifdef RT_USING_SPI1 /* register spi bus */ { static struct stm32_spi_bus stm32_spi; GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); stm32_spi_register(SPI1, &stm32_spi, "spi1"); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* spi21: PG10 */ spi_cs.GPIOx = GPIOA; spi_cs.GPIO_Pin = GPIO_Pin_4; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi10", "spi1", (void*)&spi_cs); } #endif /* RT_USING_SPI1 */ }
/* SPI2_MOSI: PB15 SPI2_MISO: PB14 SPI2_SCK : PB13 CS0: PG10 SPI FLASH CS1: PB12 TOUCH CS2: PG7 WIFI */ static void rt_hw_spi1_init(void) { /* register spi bus */ { static struct stm32_spi_bus stm32_spi; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); stm32_spi_register(SPI1, &stm32_spi, "spi1"); } /* attach nRF24L01 cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); spi_cs.GPIOx = GPIOA; spi_cs.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "nRF24L01", "spi1", (void*)&spi_cs); } }
/* SPI SPI_MOSI: XSSITXD <---> PE4 SPI_MISO: XSSIRXD <---> PE5 SPI_SCK : XSSICLK <---> PE6 CS0: XSSICSN0 <---> PE7 Touch */ int rt_hw_spi_init(void) { /* register spi bus */ { static struct imapx200_spi_bus imapx200_spi1; } /* attach cs */ { static struct rt_spi_device spi_device; static struct imapx200_spi_cs spi_cs1; /* spi10: PE7 */ spi_cs1.port = IMAP_GPE; spi_cs1.pin = 7; spi_cs1.port->DAT |= (0x01 << spi_cs1.pin); rt_spi_bus_attach_device(&spi_device, "spi10", "spi1", (void *)&spi_cs1); } return 0; }
/** * Attach the spi device to SPI bus, this function must be used after initialization. */ rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef *cs_gpiox, uint16_t cs_gpio_pin) { RT_ASSERT(bus_name != RT_NULL); RT_ASSERT(device_name != RT_NULL); rt_err_t result; struct rt_spi_device *spi_device; struct stm32_hw_spi_cs *cs_pin; /* initialize the cs pin && select the slave*/ GPIO_InitTypeDef GPIO_Initure; GPIO_Initure.Pin = cs_gpio_pin; GPIO_Initure.Mode = GPIO_MODE_OUTPUT_PP; GPIO_Initure.Pull = GPIO_PULLUP; GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(cs_gpiox, &GPIO_Initure); HAL_GPIO_WritePin(cs_gpiox, cs_gpio_pin, GPIO_PIN_SET); /* attach the device to spi bus*/ spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); RT_ASSERT(spi_device != RT_NULL); cs_pin = (struct stm32_hw_spi_cs *)rt_malloc(sizeof(struct stm32_hw_spi_cs)); RT_ASSERT(cs_pin != RT_NULL); cs_pin->GPIOx = cs_gpiox; cs_pin->GPIO_Pin = cs_gpio_pin; result = rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin); if (result != RT_EOK) { LOG_E("%s attach to %s faild, %d\n", device_name, bus_name, result); } RT_ASSERT(result == RT_EOK); LOG_D("%s attach to %s done", device_name, bus_name); return result; }
void spi_flash_init(void) { rt_spi_bus_attach_device(&spi_flash,"cs_d11","spi2",&flash_cs); w25qxx_init("flash0","cs_d11"); }
int rt_hw_spi_init(void) { DEBUG_PRINTF("register spi bus\n"); #ifdef TINA_USING_SPI0 /* register spi bus */ { rt_err_t result; DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); gpio_set_func(GPIO_PORT_C, GPIO_PIN_0, IO_FUN_1); gpio_set_func(GPIO_PORT_C, GPIO_PIN_2, IO_FUN_1); gpio_set_func(GPIO_PORT_C, GPIO_PIN_3, IO_FUN_1); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); result = tina_spi_bus_register((SPI_T *)SPI0_BASE_ADDR, "spi0"); if (result != RT_EOK) { DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); return result; } } DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); /* attach cs */ { static struct rt_spi_device spi_device; static struct tina_spi_cs spi_cs; rt_err_t result; DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); spi_cs.cs = SPI_TCTRL_SS_SEL_SS0; DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); gpio_set_func(GPIO_PORT_C, GPIO_PIN_1, IO_FUN_1); DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); result = rt_spi_bus_attach_device(&spi_device, "spi00", "spi0", (void *)&spi_cs); if (result != RT_EOK) { DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); return result; } } DEBUG_PRINTF("%s -> %d\n", __FUNCTION__, __LINE__); #endif #ifdef TINA_USING_SPI1 /* register spi bus */ { rt_err_t result; gpio_set_func(GPIO_PORT_A, GPIO_PIN_1, IO_FUN_5); gpio_set_func(GPIO_PORT_A, GPIO_PIN_2, IO_FUN_5); gpio_set_func(GPIO_PORT_A, GPIO_PIN_3, IO_FUN_5); result = tina_spi_bus_register((SPI_T *)SPI1_BASE_ADDR, "spi1"); if (result != RT_EOK) { DEBUG_PRINTF("register spi bus faild: %d\n", result); return result; } } DEBUG_PRINTF("attach cs\n"); /* attach cs */ { static struct rt_spi_device spi_device; static struct tina_spi_cs spi_cs; rt_err_t result; spi_cs.cs = SPI_TCTRL_SS_SEL_SS0; gpio_set_func(GPIO_PORT_A, GPIO_PIN_0, IO_FUN_5); result = rt_spi_bus_attach_device(&spi_device, "spi10", "spi1", (void *)&spi_cs); if (result != RT_EOK) { DEBUG_PRINTF("attach cs faild: %d\n", result); return result; } } #endif return RT_EOK; }
void rt_hw_spi3_init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); /* register spi bus */ { static struct stm32_spi_bus stm32_spi; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*!< SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12; GPIO_Init(GPIOC, &GPIO_InitStructure); /* Connect alternate function */ GPIO_PinAFConfig(GPIOC, GPIO_PinSource10, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource11, GPIO_AF_SPI3); GPIO_PinAFConfig(GPIOC, GPIO_PinSource12, GPIO_AF_SPI3); stm32_spi_register(SPI3, &stm32_spi, "spi3"); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi20: PG6 */ spi_cs.GPIOx = GPIOA; spi_cs.GPIO_Pin = GPIO_Pin_15; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi20", "spi3", (void*)&spi_cs); } { static struct rt_spi_device * rt_spi_device; struct rt_spi_configuration cfg; rt_spi_device = (struct rt_spi_device *)rt_device_find("spi20"); spi_user = rt_spi_device; rt_spi_device->bus->owner = rt_spi_device; cfg.data_width = 8; cfg.mode = RT_SPI_MODE_3 | RT_SPI_MSB; /* SPI Compatible: Mode 0 and Mode 3 */ cfg.max_hz = 2000000;//42 * 1000 * 1000; /* 50M */ rt_spi_configure(rt_spi_device, &cfg); } }
/* SPI2_MOSI: PB15 SPI2_MISO: PB14 SPI2_SCK : PB13 CS0: PG10 SPI FLASH CS1: PB12 TOUCH CS2: PG7 WIFI */ static void rt_hw_spi2_init(void) { /* register spi bus */ { static struct stm32_spi_bus stm32_spi; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*!< SPI SCK pin configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_Init(GPIOB, &GPIO_InitStructure); /* Connect alternate function */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2); GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2); stm32_spi_register(SPI2, &stm32_spi, "spi2"); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi21: PG10 */ spi_cs.GPIOx = GPIOG; spi_cs.GPIO_Pin = GPIO_Pin_10; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi20", "spi2", (void*)&spi_cs); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi21: PB12 */ spi_cs.GPIOx = GPIOB; spi_cs.GPIO_Pin = GPIO_Pin_12; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi21", "spi2", (void*)&spi_cs); } /* attach cs */ { static struct rt_spi_device spi_device; static struct stm32_spi_cs spi_cs; GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* spi20: PG7 */ spi_cs.GPIOx = GPIOG; spi_cs.GPIO_Pin = GPIO_Pin_7; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); GPIO_InitStructure.GPIO_Pin = spi_cs.GPIO_Pin; GPIO_SetBits(spi_cs.GPIOx, spi_cs.GPIO_Pin); GPIO_Init(spi_cs.GPIOx, &GPIO_InitStructure); rt_spi_bus_attach_device(&spi_device, "spi22", "spi2", (void*)&spi_cs); } }