void DMA2D_DeInit(void) { /* Enable DMA2D reset state */ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2D, ENABLE); /* Release DMA2D from reset state */ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_DMA2D, DISABLE); }
/** * @brief De-initializes the RNG peripheral registers to their default reset values. * @param None * @retval None */ void RNG_DeInit(void) { #if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F469_479xx) /* Enable RNG reset state */ RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, ENABLE); /* Release RNG from reset state */ RCC_AHB2PeriphResetCmd(RCC_AHB2Periph_RNG, DISABLE); #endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F469_479xx */ #if defined(STM32F410xx) /* Enable RNG reset state */ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_RNG, ENABLE); /* Release RNG from reset state */ RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_RNG, DISABLE); #endif /* STM32F410xx*/ }
/************************************************************************* * Function Name: I2C1_Init * Parameters: none * * Return: none * * Description: Init I2C1 interface * *************************************************************************/ void I2C1_Init (void) { I2C_InitTypeDef I2C_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; s_I2C_NotUsed = TRUE; // Enable clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); I2C_DeInit(I2C1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_I2C1); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE); // I2C configuration I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; I2C_InitStructure.I2C_OwnAddress1 = 0xAA; I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = I2C1_SPEED; // I2C Peripheral Enable I2C_Cmd(I2C1, ENABLE); // Apply I2C configuration after enabling it I2C_Init(I2C1, &I2C_InitStructure); // Enable the I2C1 Events Interrupt NVIC_InitStructure.NVIC_IRQChannel = I2C1_EV_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C1_INTR_PRIO; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C1_INTR_SUBPRIO; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // Enable the I2C1 Errors Interrupt NVIC_InitStructure.NVIC_IRQChannel = I2C1_ER_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C1_INTR_PRIO; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C1_INTR_SUBPRIO; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); // Enable interrupts from I2C1 module I2C_ITConfig(I2C1, I2C_IT_BUF | I2C_IT_EVT | I2C_IT_ERR, ENABLE); }
void GPIO_Initialise() { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA,DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_CAN2); //Tx GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_CAN2); //Rx }
//进入待机模式 void StandbyMode(void) { //关闭不需要的外设 RCC_AHB1PeriphResetCmd(0X01FF,ENABLE); //复位所有 IO 口 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能 PWR 时钟 PWR_ClearFlag(PWR_FLAG_WU);//清除 Wake-up 标志 PWR_WakeUpPinCmd(ENABLE);//设置 WKUP 用于唤醒 PWR_EnterSTANDBYMode();//进入待机模式 }
/************************************************************************* * Function Name: GLCD_SPI_Init * Parameters: Int32U Clk, Int32U Width * Return: none * * Description: Init SPI * *************************************************************************/ void GLCD_SPI_Init(Int32U Clk, Int32U Width) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock and release reset*/ RCC_AHB1PeriphClockCmd(LCD_CS_CLK | LCD_SPI_MISO_CLK | LCD_SPI_MOSI_CLK | LCD_SPI_SCLK_CLK, ENABLE); RCC_AHB1PeriphResetCmd(LCD_CS_CLK | LCD_SPI_MISO_CLK | LCD_SPI_MOSI_CLK | LCD_SPI_SCLK_CLK, DISABLE); /*LCD_CS*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = LCD_CS_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_CS_PORT, &GPIO_InitStructure); /*LCD_SPI_SCLK*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = LCD_SPI_SCLK_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_SPI_SCLK_PORT, &GPIO_InitStructure); /*LCD_SPI_MOSI*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = LCD_SPI_MOSI_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_SPI_MOSI_PORT, &GPIO_InitStructure); /*LCD_SPI_MISO*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_Pin = LCD_SPI_MISO_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_SPI_MISO_PORT, &GPIO_InitStructure); // Chip select GLCD_SPI_ChipSelect(0); GLCD_SPI_CLK_H(); // Chip select GLCD_SPI_ChipSelect(FALSE); // Set data width GLCD_SPI_SetWordWidth(Width); }
void GPIO_Initialise() { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStruct.GPIO_OType = GPIO_OType_OD; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_9; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); //IS THIS POSSIBLE > GPIO_PinAFConfig(GPIOB, GPIO_PinSource6 | GPIO_PinSource9, GPIO_AF_I2C1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_I2C1); }
/************************************************************************* * Function Name: TempSensor_Init * Parameters: none * * Return: Boolean * * Description: Init Temperature sensor * *************************************************************************/ Boolean TempSensor_Init (void) { GPIO_InitTypeDef GPIO_InitStructure; Int8U Data[3]; // Enable GPIOE port RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE , DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE , ENABLE); // Init temperature sensor interrupt signal GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &GPIO_InitStructure); if(FALSE == I2C1_Open()) { return(FALSE); } // Init Temperature sensor to default Data[0] = CONF_REG; Data[1] = 0; if(FALSE == I2C1_DataTransfer(TEMP_SENSOR_SENSOR_ADDR, Data, 2)) { I2C1_Close(); return(FALSE); } // THYS 75C Data[0] = THYS_REG; Data[1] = 0x4B; Data[2] = 0x00; if(FALSE == I2C1_DataTransfer(TEMP_SENSOR_SENSOR_ADDR, Data, 3)) { I2C1_Close(); return(FALSE); } // TOS 80C Data[0] = TOS_REG; Data[1] = 0x50; Data[2] = 0x00; if(FALSE == I2C1_DataTransfer(TEMP_SENSOR_SENSOR_ADDR, Data, 3)) { I2C1_Close(); return(FALSE); } I2C1_Close(); return(TRUE); }
/**----------------------------------------------------------------------------- * @brief Desinitialisation de la carte. */ void BSP_DeInit() { // Desactivation des interruptions __disable_irq(); // Arret Systick SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; // DeInitialisation des horloges //RCC_AHB1PeriphClockCmd(0xFFFFFFFF, DISABLE); RCC_AHB1PeriphResetCmd(0xFFFFFFFF, ENABLE); RCC_AHB1PeriphResetCmd(0xFFFFFFFF, DISABLE); //RCC_AHB2PeriphClockCmd(0xFFFFFFFF, DISABLE); RCC_AHB2PeriphResetCmd(0xFFFFFFFF, ENABLE); RCC_AHB2PeriphResetCmd(0xFFFFFFFF, DISABLE); //RCC_AHB3PeriphClockCmd(0xFFFFFFFF, DISABLE); RCC_AHB3PeriphResetCmd(0xFFFFFFFF, ENABLE); RCC_AHB3PeriphResetCmd(0xFFFFFFFF, DISABLE); //RCC_APB1PeriphClockCmd(0xFFFFFFFF, DISABLE); RCC_APB1PeriphResetCmd(0xFFFFFFFF, ENABLE); RCC_APB1PeriphResetCmd(0xFFFFFFFF, DISABLE); //RCC_APB2PeriphClockCmd(0xFFFFFFFF, DISABLE); RCC_APB2PeriphResetCmd(0xFFFFFFFF, ENABLE); RCC_APB2PeriphResetCmd(0xFFFFFFFF, DISABLE); RCC_DeInit(); // ReInit Flash FLASH_PrefetchBufferCmd(DISABLE); FLASH_InstructionCacheCmd(DISABLE); FLASH_DataCacheCmd(DISABLE); }
/*************************************************************************************************** * @fn switches_regist * * @brief 钮子开关资源注册 * @param NULL * @return null ***************************************************************************************************/ void switches_regist(void) { GPIO_InitTypeDef GPIO_InitStructure; //拨动开关 //SA RCC_AHB1PeriphResetCmd(SW_SA_H_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SA_H_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SA_H_PORT, &GPIO_InitStructure); RCC_AHB1PeriphResetCmd(SW_SA_L_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SA_L_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SA_L_PORT, &GPIO_InitStructure); //SB RCC_AHB1PeriphResetCmd(SW_SB_H_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SB_H_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SB_H_PORT, &GPIO_InitStructure); RCC_AHB1PeriphResetCmd(SW_SB_L_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SB_L_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SB_L_PORT, &GPIO_InitStructure); //SC RCC_AHB1PeriphResetCmd(SW_SC_H_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SC_H_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SC_H_PORT, &GPIO_InitStructure); RCC_AHB1PeriphResetCmd(SW_SC_L_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SC_L_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SC_L_PORT, &GPIO_InitStructure); //SD RCC_AHB1PeriphResetCmd(SW_SD_H_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SD_H_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SD_H_PORT, &GPIO_InitStructure); RCC_AHB1PeriphResetCmd(SW_SD_L_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SD_L_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SD_L_PORT, &GPIO_InitStructure); //SE RCC_AHB1PeriphResetCmd(SW_SE_H_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SE_H_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SE_H_PORT, &GPIO_InitStructure); RCC_AHB1PeriphResetCmd(SW_SE_L_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = SW_SE_L_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(SW_SE_L_PORT, &GPIO_InitStructure); }
/** * @brief De-initializes the GPIOx peripheral registers to their default reset values. * @note By default, The GPIO pins are configured in input floating mode (except JTAG pins). * @param GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F429X device or * x can be (A..I) to select the GPIO peripheral for STM32F40XX and STM32F427X devices. * @retval None */ void GPIO_DeInit(GPIO_TypeDef* GPIOx) { /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); if (GPIOx == GPIOA) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE); } else if (GPIOx == GPIOB) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); } else if (GPIOx == GPIOC) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE); } else if (GPIOx == GPIOD) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE); } else if (GPIOx == GPIOE) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE); } else if (GPIOx == GPIOF) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE); } else if (GPIOx == GPIOG) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE); } else if (GPIOx == GPIOH) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE); } #if defined (STM32F40XX) || defined (STM32F427X) else { if (GPIOx == GPIOI) { RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE); } } #endif /* STM32F40XX || STM32F427X */ #if defined (STM32F429X) else if (GPIOx == GPIOI)
/************************************************************************* * Function Name: GLCD_LLInit * Parameters: none * Return: none * * Description: Init Reset and Backlight control outputs * *************************************************************************/ void GLCD_LLInit (void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* Enable GPIO clock and release reset*/ RCC_AHB1PeriphClockCmd(LCD_RST_CLK | LCD_BL_CLK, ENABLE); RCC_AHB1PeriphResetCmd(LCD_RST_CLK | LCD_BL_CLK,DISABLE); /*LCD Reset pin init*/ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Pin = LCD_RST_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_RST_PORT, &GPIO_InitStructure); GLCD_SetReset(0); /* LCD backlight Init*/ // PWM DAC (TIM3/CH3) GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Pin = LCD_BL_MASK; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_BL_PORT, &GPIO_InitStructure); GPIO_PinAFConfig(LCD_BL_PORT,LCD_BL_PIN_SOURCE,LCD_BL_PIN_AF); // Init PWM TIM3 // Enable Timer3 clock and release reset RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM3,DISABLE); TIM_InternalClockConfig(TIM3); // Time base configuration TIM_TimeBaseStructure.TIM_Prescaler = 140; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_Period = 0xFF; // 8 bit resolution TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); // Channel 4 Configuration in PWM mode TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_Pulse = 0x00; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; TIM_OC3Init(TIM3,&TIM_OCInitStructure); // Double buffered TIM_ARRPreloadConfig(TIM3,ENABLE); // TIM3 counter enable TIM_Cmd(TIM3,ENABLE); GLCD_Backlight(0); }
error_t stm32f4x7EthInit(NetInterface *interface) { error_t error; //Debug message TRACE_INFO("Initializing STM32F4x7 Ethernet MAC...\r\n"); //Save underlying network interface nicDriverInterface = interface; //GPIO configuration stm32f4x7EthInitGpio(interface); #if defined(USE_HAL_DRIVER) //Enable Ethernet MAC clock __HAL_RCC_ETHMAC_CLK_ENABLE(); __HAL_RCC_ETHMACTX_CLK_ENABLE(); __HAL_RCC_ETHMACRX_CLK_ENABLE(); //Reset Ethernet MAC peripheral __HAL_RCC_ETHMAC_FORCE_RESET(); __HAL_RCC_ETHMAC_RELEASE_RESET(); #else //Enable Ethernet MAC clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx, ENABLE); //Reset Ethernet MAC peripheral RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, ENABLE); RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_ETH_MAC, DISABLE); #endif //Perform a software reset ETH->DMABMR |= ETH_DMABMR_SR; //Wait for the reset to complete while(ETH->DMABMR & ETH_DMABMR_SR); //Adjust MDC clock range depending on HCLK frequency ETH->MACMIIAR = ETH_MACMIIAR_CR_Div102; //PHY transceiver initialization error = interface->phyDriver->init(interface); //Failed to initialize PHY transceiver? if(error) return error; //Use default MAC configuration ETH->MACCR = ETH_MACCR_ROD; //Set the MAC address ETH->MACA0LR = interface->macAddr.w[0] | (interface->macAddr.w[1] << 16); ETH->MACA0HR = interface->macAddr.w[2]; //Initialize hash table ETH->MACHTLR = 0; ETH->MACHTHR = 0; //Configure the receive filter ETH->MACFFR = ETH_MACFFR_HPF | ETH_MACFFR_HM; //Disable flow control ETH->MACFCR = 0; //Enable store and forward mode ETH->DMAOMR = ETH_DMAOMR_RSF | ETH_DMAOMR_TSF; //Configure DMA bus mode ETH->DMABMR = ETH_DMABMR_AAB | ETH_DMABMR_USP | ETH_DMABMR_RDP_1Beat | ETH_DMABMR_RTPR_1_1 | ETH_DMABMR_PBL_1Beat | ETH_DMABMR_EDE; //Initialize DMA descriptor lists stm32f4x7EthInitDmaDesc(interface); //Prevent interrupts from being generated when the transmit statistic //counters reach half their maximum value ETH->MMCTIMR = ETH_MMCTIMR_TGFM | ETH_MMCTIMR_TGFMSCM | ETH_MMCTIMR_TGFSCM; //Prevent interrupts from being generated when the receive statistic //counters reach half their maximum value ETH->MMCRIMR = ETH_MMCRIMR_RGUFM | ETH_MMCRIMR_RFAEM | ETH_MMCRIMR_RFCEM; //Disable MAC interrupts ETH->MACIMR = ETH_MACIMR_TSTIM | ETH_MACIMR_PMTIM; //Enable the desired DMA interrupts ETH->DMAIER = ETH_DMAIER_NISE | ETH_DMAIER_RIE | ETH_DMAIER_TIE; //Set priority grouping (4 bits for pre-emption priority, no bits for subpriority) NVIC_SetPriorityGrouping(STM32F4X7_ETH_IRQ_PRIORITY_GROUPING); //Configure Ethernet interrupt priority NVIC_SetPriority(ETH_IRQn, NVIC_EncodePriority(STM32F4X7_ETH_IRQ_PRIORITY_GROUPING, STM32F4X7_ETH_IRQ_GROUP_PRIORITY, STM32F4X7_ETH_IRQ_SUB_PRIORITY)); //Enable MAC transmission and reception ETH->MACCR |= ETH_MACCR_TE | ETH_MACCR_RE; //Enable DMA transmission and reception ETH->DMAOMR |= ETH_DMAOMR_ST | ETH_DMAOMR_SR; //Accept any packets from the upper layer osSetEvent(&interface->nicTxEvent); //Successful initialization return NO_ERROR; }
/**----------------------------------------------------------------------------- * @brief Initialisation d'une Pin. * * @param[in] PinId Numero d'identification de la pin. */ void GPIO_InitPin(MappingGpio_e PinId) { GPIO_InitTypeDef GPIO; // Activation de l'horloge assiciee a la Pin switch ((uint32_t) MappingGpio[PinId].pGPIOx) { case (uint32_t) GPIOA : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); break; case (uint32_t) GPIOB : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOB, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); break; case (uint32_t) GPIOC : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); break; case (uint32_t) GPIOD : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOD, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); break; case (uint32_t) GPIOE : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOE, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); break; case (uint32_t) GPIOF : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOF, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); break; case (uint32_t) GPIOG : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOG, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); break; case (uint32_t) GPIOH : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOH, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH, ENABLE); break; case (uint32_t) GPIOI : RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOI, DISABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI, ENABLE); break; default: break; } // Configuration de la pin GPIO.GPIO_Pin = (uint16_t) (1 << MappingGpio[PinId].Pin); GPIO.GPIO_Mode = MappingGpio[PinId].GPIO_Mode; GPIO.GPIO_Speed = MappingGpio[PinId].GPIO_Speed; GPIO.GPIO_OType = MappingGpio[PinId].GPIO_OType; GPIO.GPIO_PuPd = MappingGpio[PinId].GPIO_PuPd; GPIO_Init(MappingGpio[PinId].pGPIOx, &GPIO); // Initialisation de la pin si necessaire switch (MappingGpio[PinId].GPIO_Mode) { // Si sortie, ecriture de l'état initial case GPIO_Mode_OUT: GPIO_Set(PinId, MappingGpio[PinId].EtatInit); break; // Si Mode AF, connect pin to alternate function case GPIO_Mode_AF: GPIO_PinAFConfig(MappingGpio[PinId].pGPIOx, MappingGpio[PinId].Pin, MappingGpio[PinId].GPIO_AF); break; case GPIO_Mode_IN: case GPIO_Mode_AN: default: break; } }