1 | void Init_GPIOA()
|
2 | {
|
3 | // enable peripheral clock for GPIOA
|
4 | RCC->AHBENR |= RCC_AHBPeriph_GPIOA;
|
5 |
|
6 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_5); // set alternative Funktion f. SPI1 (I_SCLK)
|
7 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_5); // set alternative Funktion f. SPI1 (I_MISO)
|
8 | GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_5); // set alternative Funktion f. SPI1 (I_MOSI)
|
9 |
|
10 | pGPIOx_InitStruct->GPIO_Pin = (uint32_t)(GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); // SCLK, MISO, MOSI
|
11 | pGPIOx_InitStruct->GPIO_Mode = GPIO_Mode_AF;
|
12 | pGPIOx_InitStruct->GPIO_Speed = GPIO_Speed_Level_1; // high speed (50MHz)
|
13 | pGPIOx_InitStruct->GPIO_OType = GPIO_OType_PP; // push-pull
|
14 | pGPIOx_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
15 |
|
16 | GPIO_Init(GPIOA, pGPIOx_InitStruct); // set pins
|
17 |
|
18 | pGPIOx_InitStruct->GPIO_Pin = (uint32_t)(GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4); //Chip-Select: CS1, CS2, CS3, CS4
|
19 | pGPIOx_InitStruct->GPIO_Mode = GPIO_Mode_OUT;
|
20 | pGPIOx_InitStruct->GPIO_Speed = GPIO_Speed_Level_3; // high speed (50MHz)
|
21 | pGPIOx_InitStruct->GPIO_OType = GPIO_OType_PP; // push-pull
|
22 | pGPIOx_InitStruct->GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
23 |
|
24 | GPIO_Init(GPIOA, pGPIOx_InitStruct);
|
25 | }
|
26 |
|
27 | void Init_SPI1(void)
|
28 | {
|
29 | // Enable peripheral clock
|
30 | RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
|
31 |
|
32 | SPI_I2S_DeInit(SPI1);
|
33 |
|
34 | SPI_InitTypeDef SPI_InitStructure;
|
35 |
|
36 | SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
37 | SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
38 | SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
39 | SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // CPOL is set -> SCK pin has a high-level idle state
|
40 | SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // second edge on the SCK pin captures the first data bit transacted (rising edge because the CPOL bit is set)
|
41 | SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
42 | SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
|
43 | SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
44 |
|
45 |
|
46 | SPI_Init(SPI1,&SPI_InitStructure);
|
47 | SPI_CalculateCRC(SPI1, DISABLE);
|
48 | SPI_SSOutputCmd(SPI1, ENABLE);
|
49 | SPI_Cmd(SPI1, ENABLE);
|
50 |
|
51 | while(true)
|
52 | {
|
53 | SPI1->DR = 0x6;
|
54 | // SPI_SendData8(SPI1,0x6);
|
55 | while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
|
56 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == 1);
|
57 | delay_1us(10);
|
58 | }
|
59 | }
|