main.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include <stdio.h>
  2. #include "stm32f0xx.h"
  3. #include "crutchs.h"
  4. #include "system_stm32f0xx.h"
  5. #include "stm32f0xx_rcc.h"
  6. #include "stm32f0xx_gpio.h"
  7. #include "stm32f0xx_spi.h"
  8. #include "stm32f0xx_adc.h"
  9. #include "system_stm32f0xx.c"
  10. #include "stm32f0xx_rcc.c"
  11. #include "stm32f0xx_gpio.c"
  12. #include "stm32f0xx_spi.c"
  13. #include "stm32f0xx_adc.c"
  14. //Объявляем переменные
  15. GPIO_InitTypeDef port;
  16. SPI_InitTypeDef spi;
  17. ADC_InitTypeDef adc;
  18. uint8_t sendData;
  19. uint16_t counter = 0;
  20. uint16_t data;
  21. void initAll()
  22. {
  23. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  24. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  25. RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
  26. port.GPIO_Mode = GPIO_Mode_AF;
  27. port.GPIO_OType = GPIO_OType_PP;
  28. port.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  29. port.GPIO_Speed = GPIO_Speed_50MHz;
  30. GPIO_Init(GPIOA, &port);
  31. ADC_StructInit(&adc);
  32. adc.ADC_ContinuousConvMode = ENABLE;
  33. adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
  34. ADC_Init(ADC1, &adc);
  35. SPI_StructInit(&spi);
  36. spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  37. spi.SPI_Mode = SPI_Mode_Master;
  38. spi.SPI_DataSize = SPI_DataSize_8b;
  39. spi.SPI_CPOL = SPI_CPOL_Low;
  40. spi.SPI_CPHA = SPI_CPHA_2Edge;
  41. spi.SPI_NSS = SPI_NSS_Soft;
  42. spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  43. spi.SPI_FirstBit = SPI_FirstBit_MSB;
  44. spi.SPI_CRCPolynomial = 7;
  45. SPI_Init(SPI1, &spi);
  46. GPIO_StructInit(&port);
  47. port.GPIO_PuPd = GPIO_PuPd_DOWN;
  48. port.GPIO_Pin = GPIO_Pin_0;
  49. port.GPIO_Speed = GPIO_Speed_2MHz;
  50. GPIO_Init(GPIOA, &port);
  51. }
  52. int main()
  53. {
  54. __enable_irq();
  55. initAll();
  56. //Включаем АЦП
  57. // ADC_Cmd(ADC1, ENABLE);
  58. // ADC_SoftwareStartConvCmd(ADC1, ENABLE);
  59. //И конечно же включаем SPI
  60. SPI_Cmd(SPI1, ENABLE);
  61. while(1)
  62. {
  63. //Это просто счетчик, чтобы отсылать на шину данные только когда счетчик
  64. //досчитает до 15000, число взято абсолютно "от балды" ))
  65. counter++;
  66. // data = ADC_GetConversionValue(ADC1);
  67. //Сделали АЦП, анализируем данные
  68. if (data == 0xFFF)
  69. {
  70. sendData = 0x04;
  71. }
  72. else if (data > 0xE8B)
  73. {
  74. sendData = 0x03;
  75. }
  76. else if (data > 0x9B2)
  77. {
  78. sendData = 0x02;
  79. }
  80. else if (data > 0x4D9)
  81. {
  82. sendData = 0x01;
  83. }
  84. else
  85. {
  86. sendData = 0x00;
  87. }
  88. if(counter == 15000)
  89. {
  90. //Отсылаем, ради этого все и затеивалось
  91. SPI_I2S_SendData16(SPI1, sendData);
  92. }
  93. }
  94. }