You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
2.5 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include <stdbool.h>
  2. #include <stdint.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "main.h"
  6. #include "usart.h"
  7. #include "tim.h"
  8. #define READ_CMD 0x80
  9. #define SPI_TIMEOUT_VALUE 1000
  10. #define SPI_CS_1() HAL_GPIO_WritePin(SPI_SEL_GPIO_Port, SPI_SEL_Pin, GPIO_PIN_SET) /* */
  11. #define SPI_CS_0() HAL_GPIO_WritePin(SPI_SEL_GPIO_Port, SPI_SEL_Pin, GPIO_PIN_RESET) /* */
  12. #define SPI_SCK_1() HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_SET) /* SCK = 1 */
  13. #define SPI_SCK_0() HAL_GPIO_WritePin(CLK_GPIO_Port, CLK_Pin, GPIO_PIN_RESET) /* SCK = 0 */
  14. #define SPI_MOSI_1() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_SET) /* MOSI = 1 */
  15. #define SPI_MOSI_0() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_RESET) /* MOSI = 0 */
  16. #define SPI_READ_MISO() HAL_GPIO_ReadPin(MISO_GPIO_Port, MISO_Pin) /* 读MISO口线状态 */
  17. #define Dummy_Byte 0xFF // 读取时MISO发送的数据,可以为任意数据
  18. #define spi_delay_us 5
  19. #define spi_table_type_size 50
  20. typedef enum
  21. {
  22. SPI_SEL_TYPE = 0,
  23. SPI_SCK_TYPE,
  24. SPI_MOSI_TYPE,
  25. SPI_MISO_TYPE,
  26. SPI_TYPE_NUMBER,
  27. } SPI_TYPE;
  28. uint8_t table[SPI_TYPE_NUMBER][spi_table_type_size] = {
  29. {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, // sel
  30. {1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // sck
  31. {1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1}, // mosi
  32. {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // miso
  33. };
  34. void sys_delay_us(uint32_t us)
  35. {
  36. uint16_t counter = 0;
  37. __HAL_TIM_SET_COUNTER(&htim7, 0);
  38. HAL_TIM_Base_Start(&htim7);
  39. while (counter < us)
  40. {
  41. counter = __HAL_TIM_GET_COUNTER(&htim7);
  42. }
  43. HAL_TIM_Base_Stop(&htim7);
  44. }
  45. void dotable()
  46. {
  47. for (size_t i = 0; i < spi_table_type_size; i++)
  48. {
  49. table[0][i] ? SPI_CS_1() : SPI_CS_0();
  50. table[1][i] ? SPI_SCK_1() : SPI_SCK_0();
  51. table[2][i] ? SPI_MOSI_1() : SPI_MOSI_0();
  52. sys_delay_us(spi_delay_us);
  53. }
  54. }
  55. void user_main()
  56. {
  57. uint8_t temp;
  58. SPI_CS_1(); // 片选
  59. SPI_SCK_1(); // 时钟空闲高电平
  60. SPI_MOSI_1(); // 数据线空闲高电平
  61. while (1)
  62. {
  63. dotable();
  64. // HAL_UART_Transmit(&huart1, &temp, 1, 100);
  65. HAL_Delay(10);
  66. }
  67. }