Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.59 KB | None | 0 0
  1. void Init_SPI(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure; // GPIO Setup object
  4. // enable clock for CLK & MISO & MOSI GPIO (CLK: GPIO_PB_13 / MISO: GPIO_PB_14 / MOSI: GPIO_PB_15)
  5. __HAL_RCC_SPI1_FORCE_RESET( );
  6. __HAL_RCC_SPI1_RELEASE_RESET( );
  7.  
  8. __HAL_RCC_SPI1_CLK_ENABLE( );
  9.  
  10. GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; // Set GPIO Alternate function Mode
  11. GPIO_InitStructure.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; // GPIO Pin Number
  12. GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; // Set the speed for the selected pins
  13. GPIO_InitStructure.Pull = GPIO_PULLUP; // GPIO Pull-up/pull-down operation
  14. GPIO_InitStructure.Alternate = GPIO_AF0_SPI1;
  15. HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
  16.  
  17. // configure I2C peripherical
  18. SPI1_Init.Instance = SPI1;
  19. SPI1_Init.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  20. SPI1_Init.Init.CLKPhase = SPI_PHASE_1EDGE;
  21. SPI1_Init.Init.CLKPolarity = SPI_POLARITY_LOW;
  22. SPI1_Init.Init.DataSize = SPI_DATASIZE_8BIT;
  23. SPI1_Init.Init.Direction = SPI_DIRECTION_2LINES;
  24. SPI1_Init.Init.FirstBit = SPI_FIRSTBIT_MSB;
  25. SPI1_Init.Init.Mode = SPI_MODE_MASTER;
  26. SPI1_Init.Init.NSS = SPI_NSS_HARD_OUTPUT;
  27. SPI1_Init.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  28. // enable I2C peripheral
  29. HAL_SPI_Init(&SPI1_Init);
  30. __HAL_SPI_ENABLE(&SPI1_Init); // Enable I2C
  31.  
  32. }
  33. void SPI_Write_Enable()
  34. {
  35. uint8_t tx_data[4];
  36. tx_data[0] = 0x06;
  37. GpioWrite(&flash_en,0);
  38. HAL_SPI_Transmit(&SPI1_Init,tx_data,1,1000);
  39. GpioWrite(&flash_en,1);
  40. GpioWrite(&flash_en,0);
  41. tx_data[0] = 0x05;
  42. HAL_SPI_Transmit(&SPI1_Init,tx_data,1,1000);
  43. HAL_SPI_Receive(&SPI1_Init,tx_data,1,1000);
  44. GpioWrite(&flash_en,1);
  45. if((tx_data[0] >> 1 & 0x01) != 0x01)
  46. {
  47. UartPrint("errorrn");
  48. }
  49. GpioWrite(&flash_en,0);
  50. tx_data[0] = 0x01;
  51. tx_data[1] = 0x02;
  52. tx_data[2] = 0x40;
  53. HAL_SPI_Transmit(&SPI1_Init,tx_data,3,1000);
  54. GpioWrite(&flash_en,1);
  55.  
  56. }
  57. void SPI_Write_Data()
  58. {
  59. uint8_t tx_data[20],cmd[2];
  60.  
  61. tx_data[0] = 0x52;
  62. tx_data[1] = 0x00;
  63. tx_data[2] = 0x00;
  64. tx_data[3] = 0x00;
  65. GpioWrite(&flash_en,0);
  66. HAL_SPI_Transmit(&SPI1_Init,tx_data,14,1000);
  67. GpioWrite(&flash_en,1);
  68.  
  69. Retry1:
  70. cmd[0] = 0x06;
  71. GpioWrite(&flash_en,0);
  72. while(HAL_SPI_Transmit(&SPI1_Init,cmd,1,1000)!= HAL_OK);
  73. GpioWrite(&flash_en,1);
  74. DelayMs(100);
  75. Retry:
  76. GpioWrite(&flash_en,0);
  77. tx_data[0] = 0x05;
  78. while(HAL_SPI_Transmit(&SPI1_Init,tx_data,1,1000)!=HAL_OK);
  79. while(HAL_SPI_Receive(&SPI1_Init,tx_data,1,1000)!=HAL_OK);
  80. GpioWrite(&flash_en,1);
  81. if((tx_data[0] >> 1 & 0x01) != 0x01)
  82. {
  83. UartPrint("error_wel_not enablern");
  84. DelayMs(1000);
  85. goto Retry1;
  86. }
  87. else
  88. {
  89. DelayMs(1000);
  90. UartPrint("wel enabledrn");
  91. }
  92. if((tx_data[0] & 0x01) == 0x01)
  93. {
  94. UartPrint("BUSYrn");
  95. goto Retry;
  96. }
  97. cmd[0] = 0x06;
  98. GpioWrite(&flash_en,0);
  99. while(HAL_SPI_Transmit(&SPI1_Init,cmd,1,1000)!= HAL_OK);
  100. GpioWrite(&flash_en,1);
  101. GpioWrite(&flash_en,0);
  102. tx_data[0] = 0x02;
  103. tx_data[1] = 0x00;
  104. tx_data[2] = 0x00;
  105. tx_data[3] = 0x0A;
  106. tx_data[4] = 0xAA;
  107. tx_data[5] = 0xAA;
  108. tx_data[6] = 0xAA;
  109. tx_data[7] = 0xAA;
  110. tx_data[8] = 0xAA;
  111. tx_data[9] = 0xAA;
  112. tx_data[10] = 0xAA;
  113. tx_data[11] = 0xAA;
  114. tx_data[12] = 0xAA;
  115. tx_data[13] = 0xAA;
  116. if(HAL_SPI_Transmit(&SPI1_Init,tx_data,14,5000) != HAL_OK)
  117. {
  118. UartPrint("write errorrn");
  119. }
  120. GpioWrite(&flash_en,1);
  121. }
  122.  
  123. void SPI_Read_Data(uint8_t *data)
  124. {
  125. uint8_t tx_data[20],cmd[2];
  126. cmd[0] = 0x04;
  127. GpioWrite(&flash_en,0);
  128. while(HAL_SPI_Transmit(&SPI1_Init,cmd,1,1000)!= HAL_OK);
  129. GpioWrite(&flash_en,1);
  130. GpioWrite(&flash_en,0);
  131. tx_data[0] = 0x05;
  132. while(HAL_SPI_Transmit(&SPI1_Init,tx_data,1,1000)!=HAL_OK);
  133. while(HAL_SPI_Receive(&SPI1_Init,tx_data,1,1000)!=HAL_OK);
  134. GpioWrite(&flash_en,1);
  135. if((tx_data[0] >> 1 & 0x01) == 0x01)
  136. {
  137. UartPrint(" wel enablern");
  138. }
  139. if((tx_data[0] & 0x01) == 0x01)
  140. {
  141. UartPrint("BUSYrn");
  142. }
  143. tx_data[0] = 0x03;
  144. tx_data[1] = 0x00;
  145. tx_data[2] = 0x00;
  146. tx_data[3] = 0x0A;
  147.  
  148. GpioWrite(&flash_en,0);
  149. HAL_SPI_Transmit(&SPI1_Init,tx_data,4,1000);
  150. if(HAL_SPI_Receive(&SPI1_Init,data,10,1000)!= HAL_OK)
  151. {
  152. UartPrint("error_readrn");
  153. }
  154. GpioWrite(&flash_en,1);
  155. }
  156. ////////////////////////////////////////////////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement