int main(void){ halInit(); chSysInit(); /* * Initializes the SPI driver 1. */ spiStart(&SPID1, &spicfg); chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); chThdCreateStatic(waSegThread1, sizeof(waSegThread1), NORMALPRIO+2, SegThread1, NULL); //chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO+2, Thread2, NULL); //chThdCreateStatic(waPWMThread2, sizeof(waPWMThread2), NORMALPRIO+1, PWMThread2, NULL); init_digit_pins(); init_SPI1(); palSetPadMode(GPIOC, 8, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(GPIOC, 9, PAL_MODE_OUTPUT_PUSHPULL); //TestThread(&SD1); while (TRUE){ palSetPad(GPIOC, 8); //TestThread(&SD1); chThdSleepMilliseconds(500); palClearPad(GPIOC, 8); chThdSleepMilliseconds(500); } }
int main(void){ uint8_t received_val = 0; init_SPI1(); while(1){ GPIOE->BSRRH |= GPIO_Pin_7; // set PE7 (CS) low SPI1_send(0xAA); // transmit data received_val = SPI1_send(0x00); // transmit dummy byte and receive data GPIOE->BSRRL |= GPIO_Pin_7; // set PE7 (CS) high } }
/******************************************************************** * INITIALIZATION * ******************************************************************/ void enc424j600Init(void) { debug_entry; //Set default bank currentBank = 0; init_SPI1(); DeassertChipSelect(); ENCX24J600_Reset(); delay_loop_ms (100); ENCX24J600_Unreset (); // Perform a reliable reset enc424j600SendSystemReset(); // Initialize RX tracking variables and other control state flags nextPacketPointer = RXSTART; // Set up TX/RX/UDA buffer addresses enc424j600WriteReg(ETXST, TXSTART); enc424j600WriteReg(ERXST, RXSTART); enc424j600WriteReg(ERXTAIL, RAMSIZE - 2); enc424j600WriteReg(EUDAST, USSTART); enc424j600WriteReg(EUDAND, USEND); // If promiscuous mode is set, than allow accept all packets #ifdef PROMISCUOUS_MODE enc424j600WriteReg(ERXFCON, (ERXFCON_CRCEN | ERXFCON_RUNTEN | ERXFCON_UCEN | ERXFCON_NOTMEEN | ERXFCON_MCEN)); dd #endif // Set PHY Auto-negotiation to support 10BaseT Half duplex, // 10BaseT Full duplex, 100BaseTX Half Duplex, 100BaseTX Full Duplex, // and symmetric PAUSE capability enc424j600WritePHYReg(PHANA, PHANA_ADPAUS0 | PHANA_AD10FD | PHANA_AD10 | PHANA_AD100FD | PHANA_AD100 | PHANA_ADIEEE0); // Enable RX packet reception enc424j600BFSReg(ECON1, ECON1_RXEN); // KUKU, supaya GPIO aktif untuk deteck packet enc424j600WriteReg(EIE, EIE_INTIE | EIE_LINKIE | EIE_PKTIE | EIE_TXABTIE | EIE_RXABTIE); debug_leave; }
void InitApp(void) { /* Setup analog functionality and port direction */ //IO configuration (pull-up CN interrupts enable // IEC1bits.CNIE=1; // IPC4bits.CNIP=1; /* Initialize peripherals */ init_peripheral_pin_select(); uart1_Initialize(19200); init_timer2(); init_timer3(); init_SPI1(); init_SPI2(); }
void initGPS(){ init_SPI1(); init_DMA0(); }
int main(void) { //инициализация анимации. //InitServosAnimations(&animations); //Инициализируем UART init_usart(); //инициализация SPI1 init_SPI1(); init_servo_data(&servos_data); //настройка пределов struct GroupSettings g0 = {0, 0.02, 240, {{0.00039,0.00242,}, {0.00048, 0.0025}, {0.00048, 0.00249}, {0.0004, 0.00242}}}; set_servo_range(&servos_data, &g0); struct GroupSettings g1 = {1, 0.02, 240, {{0.00053,0.00255}, {0.000449,0.00244}, {0.00048,0.0025}, {0.000459, 0.00248}}}; set_servo_range(&servos_data, &g1); struct GroupSettings g2 = {2, 0.02, 240, {{0.000440, 0.002480}, {0.000440, 0.002440}, {0.000510, 0.002460}, {0.000480, 0.002500}}}; set_servo_range(&servos_data, &g2); struct GroupSettings g3 = {3, 0.02, 240, {{0.00048, 0.0025}, {0.00048, 0.00249}, {0.000449, 0.00243}, {0.00047, 0.0025}}}; set_servo_range(&servos_data, &g3); //Глобальное включение прерывания SysTick_Config(SystemCoreClock/50); __enable_irq(); //тест порта /** GPIO_InitTypeDef gpio; GPIO_StructInit(&gpio); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); gpio.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; gpio.GPIO_Speed = GPIO_Speed_50MHz; gpio.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &gpio); GPIO_SetBits(GPIOB, GPIO_Pin_10 | GPIO_Pin_11); */ GPIO_InitTypeDef PORT; //Включаем порты А и С RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); //Настраиваем ноги PC8 и PC9 на выход. Там у нас висят светодиоды PORT.GPIO_Pin = GPIO_Pin_0; PORT.GPIO_Mode = GPIO_Mode_AIN; PORT.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOC , &PORT); RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE); //Включаем тактирование АЦП ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки АЦП while (!(ADC1->CR2 & ADC_CR2_CAL)); //Ожидаем окончания калибровки ADC1->SMPR2 |= (ADC_SMPR2_SMP1_2 | ADC_SMPR2_SMP1_1 | ADC_SMPR2_SMP1_0); //Задаем // длительность выборки ADC1->CR2 |= ADC_CR2_JEXTSEL; //Преобразование инжектированной группы //запустится установкой бита JSWSTART ADC1->CR2 |= ADC_CR2_JEXTTRIG; //Разрешаем внешний запуск инжектированной группы ADC1->CR2 |= ADC_CR2_CONT; //Преобразования запускаются одно за другим ADC1->CR1 |= ADC_CR1_JAUTO; //Разрешить преобразование инжектированной группы //после регулярной. Не понятно зачем, но без этого не работает ADC1->JSQR |= (10<<15); //Задаем номер канала (выбран ADC1) ADC1->CR2 |= ADC_CR2_ADON;//Теперь включаем АЦП ADC1->CR2 |= ADC_CR2_JSWSTART; //Запуск преобразований while (!(ADC1->SR & ADC_SR_JEOC)); //ждем пока первое преобразование завершится //Теперь можно читать результат из JDR1 uint32_t adc_res; //Использовал переменную для отладки. Можно и без неё while(1) { adc_res=ADC1->JDR1; delay(adc_res); } while(1) {} }
void systemInit(void) { GPIO_InitTypeDef GPIO_InitStructure; //uint32_t i; //GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitStructure.GPIO_Pin = LED0_PIN | LED1_PIN | LED2_PIN| LED3_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &GPIO_InitStructure); #ifdef BUZZER { RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = BEEP_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOD, &GPIO_InitStructure); }; #endif // uint8_t gpio_count = sizeof(gpio_cfg) / sizeof(gpio_cfg[0]); // This is needed because some shit inside Keil startup f***s with SystemCoreClock, setting it back to 72MHz even on HSI. SystemCoreClockUpdate(); // Turn on clocks for stuff we use RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5 | RCC_APB1Periph_I2C2 | RCC_APB1Periph_SPI2 | RCC_APB1Periph_USART2 | RCC_APB1Periph_USART3 , ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 | RCC_APB2Periph_TIM8 | RCC_APB2Periph_ADC1 | RCC_APB2Periph_USART1 | RCC_APB2Periph_SPI1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_DMA2, ENABLE); RCC_ClearFlag(); /*/ Make all GPIO in by default to save power and reduce noise GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_Init(GPIOC, &GPIO_InitStructure); // Turn off JTAG port 'cause we're using the GPIO for leds GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // Configure gpio for (i = 0; i < gpio_count; i++) { GPIO_InitStructure.GPIO_Pin = gpio_cfg[i].pin; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = gpio_cfg[i].mode; GPIO_Init(gpio_cfg[i].gpio, &GPIO_InitStructure); }*/ LED0_OFF; LED1_OFF; LED2_OFF; LED3_OFF; BEEP_OFF; // Init cycle counter cycleCounterInit(); // SysTick SysTick_Config(SystemCoreClock / 1000); // Configure the rest of the stuff #ifndef FY90Q i2cInit(I2C2); init_SPI1(); init_SPI2(); #endif // sleep for 100ms delay(100); }