123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include <stdio.h>
- #include "stm32f0xx.h"
- #include "crutchs.h"
- #include "system_stm32f0xx.h"
- #include "stm32f0xx_rcc.h"
- #include "stm32f0xx_gpio.h"
- #include "stm32f0xx_spi.h"
- #include "stm32f0xx_adc.h"
- #include "system_stm32f0xx.c"
- #include "stm32f0xx_rcc.c"
- #include "stm32f0xx_gpio.c"
- #include "stm32f0xx_spi.c"
- #include "stm32f0xx_adc.c"
- //Объявляем переменные
- GPIO_InitTypeDef port;
- SPI_InitTypeDef spi;
- ADC_InitTypeDef adc;
- uint8_t sendData;
- uint16_t counter = 0;
- uint16_t data;
- void initAll()
- {
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
- port.GPIO_Mode = GPIO_Mode_AF;
- port.GPIO_OType = GPIO_OType_PP;
- port.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
- port.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &port);
- ADC_StructInit(&adc);
- adc.ADC_ContinuousConvMode = ENABLE;
- adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_TRGO;
- ADC_Init(ADC1, &adc);
- SPI_StructInit(&spi);
- spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- spi.SPI_Mode = SPI_Mode_Master;
- spi.SPI_DataSize = SPI_DataSize_8b;
- spi.SPI_CPOL = SPI_CPOL_Low;
- spi.SPI_CPHA = SPI_CPHA_2Edge;
- spi.SPI_NSS = SPI_NSS_Soft;
- spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
- spi.SPI_FirstBit = SPI_FirstBit_MSB;
- spi.SPI_CRCPolynomial = 7;
- SPI_Init(SPI1, &spi);
- GPIO_StructInit(&port);
- port.GPIO_PuPd = GPIO_PuPd_DOWN;
- port.GPIO_Pin = GPIO_Pin_0;
- port.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_Init(GPIOA, &port);
- }
- int main()
- {
- __enable_irq();
- initAll();
- //Включаем АЦП
- // ADC_Cmd(ADC1, ENABLE);
- // ADC_SoftwareStartConvCmd(ADC1, ENABLE);
- //И конечно же включаем SPI
- SPI_Cmd(SPI1, ENABLE);
- while(1)
- {
- //Это просто счетчик, чтобы отсылать на шину данные только когда счетчик
- //досчитает до 15000, число взято абсолютно "от балды" ))
- counter++;
- // data = ADC_GetConversionValue(ADC1);
- //Сделали АЦП, анализируем данные
- if (data == 0xFFF)
- {
- sendData = 0x04;
- }
- else if (data > 0xE8B)
- {
- sendData = 0x03;
- }
- else if (data > 0x9B2)
- {
- sendData = 0x02;
- }
- else if (data > 0x4D9)
- {
- sendData = 0x01;
- }
- else
- {
- sendData = 0x00;
- }
- if(counter == 15000)
- {
- //Отсылаем, ради этого все и затеивалось
- SPI_I2S_SendData16(SPI1, sendData);
- }
- }
- }
|