/** * @brief Configure the TIMER peripheral. * @param None * @retval None */ void TIMER_Configuration(void) { /* --------------------------------------------------------------------------- TIMER2 Configuration: Output Compare Toggle Mode: TIMER2CLK = SystemCoreClock / 36000=2K, CH2 update rate = TIMER2 counter clock / CHCC2 = 2000/4000 = 0.5 Hz ----------------------------------------------------------------------------*/ TIMER_BaseInitPara TIMER_TimeBaseStructure; TIMER_OCInitPara TIMER_OCInitStructure; /* TIMERS clock enable */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE); /* TIMER2 configuration */ TIMER_DeInit(TIMER2); TIMER_TimeBaseStructure.TIMER_Prescaler = 35999; TIMER_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_TimeBaseStructure.TIMER_Period = 3999; TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_BaseInit(TIMER2,&TIMER_TimeBaseStructure); /* CH2 Configuration in OC_TOGGLE mode */ TIMER_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_TOGGLE; TIMER_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIMER_OCInitStructure.TIMER_Pulse = 3999; TIMER_OC2_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC2_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); /* Auto-reload preload enable */ TIMER_CARLPreloadConfig(TIMER2,ENABLE); /* TIMER enable counter*/ TIMER_Enable( TIMER2, ENABLE ); }
/** * @brief Select the RTC clock source. * @param None * @retval None */ void RTC_PreConfiguration(void) { /* Enable PWR clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /* Enable the access of the RTC registers */ PWR_BackupAccess_Enable(ENABLE); #if defined (RTC_CLOCK_SOURCE_LSI) RCC_LSI_Enable(ENABLE); while(RCC_GetBitState(RCC_FLAG_LSISTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); prescaler_s = 0x18F; prescaler_a = 0x63; #elif defined (RTC_CLOCK_SOURCE_LSE) RCC_LSEConfig(RCC_LSE_EN); while(RCC_GetBitState(RCC_FLAG_LSESTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); prescaler_s = 0xFF; prescaler_a = 0x7F; #else #error RTC Clock source should be defined. #endif /* RTC_CLOCK_SOURCE_LSI */ RCC_RTCCLK_Enable(ENABLE); RTC_WaitRSF_ToSetAgain(); }
/** * @brief Configure system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* GPIOB Periph clock enable */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB, ENABLE); /* IVREF Periph clock enable */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_IVREF, ENABLE); }
/** * @brief Configures the DAC. * @param None * @retval None */ void DAC_Configuration(void) { DAC_InitPara DAC_InitStructure; RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_DAC, ENABLE); /* DAC channel1 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_TRIGGER_T2_TRIG; DAC_InitStructure.DAC_WaveType = DAC_WAVEGENE_NOISE; DAC_InitStructure.DAC_LFSRNoise_AmplitudeTriangle = DAC_LFSR_BITS9_0; DAC_InitStructure.DAC_OutputBuffer = DAC_OUTPUTBUFFER_DISABLE; DAC_Init(DAC_CHANNEL_1, &DAC_InitStructure); /* DAC channel2 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_TRIGGER_T3_TRIG; DAC_InitStructure.DAC_LFSRNoise_AmplitudeTriangle = DAC_LFSR_BITS10_0; DAC_Init(DAC_CHANNEL_2, &DAC_InitStructure); /* Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is automatically connected to the DAC converter. */ DAC_Enable(DAC_CHANNEL_1, ENABLE); /* Enable DAC Channel2: Once the DAC channel2 is enabled, PA.05 is automatically connected to the DAC converter. */ DAC_Enable(DAC_CHANNEL_2, ENABLE); /* Set DAC dual channel DHR12RD register */ DAC_SetDualChannelData(DAC_ALIGN_12B_R, 0x7F0, 0x7F0); }
/** * @brief Enable the peripheral clock. * @param None * @retval None */ void RCC_Configuration(void) { /* Enable GPIOB clock */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB,ENABLE); /* Enable BOARD_I2C APB1 clock */ RCC_APB1PeriphClock_Enable(I2C_RCC,ENABLE); }
/** * @brief RCC configuration. * @param None * @retval None */ void RCC_Configuration(void) { RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA,ENABLE); RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB,ENABLE); RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOC,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2,ENABLE); RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_CMP ,ENABLE); }
/** * @brief Configure the TIMER peripheral. * @param None * @retval None */ void TIM_Configuration(void) { /* ----------------------------------------------------------------------- TIMER2 Configuration: Single Pulse Mode The external signal is connected to TIMER2 CH1 pin (PA0) and the Rising edge is used as active edge. The Single Pulse signal is output on TIMER2 CH2 pin (PA1). The TIMER2CLK frequency is set to SystemCoreClock (Hz),the Prescaler is 4,so the TIMER2 counter clock is 27MHz. Single Pulse value = (TIMER2_Period - TIMER2_Pulse) / TIMER2 counter clock = (65535 - 11535) / 27M = 2.0 ms. ----------------------------------------------------------------------- */ TIMER_BaseInitPara TIMER_TimeBaseStructure; TIMER_OCInitPara TIMER_OCInitStructure; TIMER_ICInitPara TIM_ICInitStructure; /* TIMER2 clock enable */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2,ENABLE); /* TIMER2 configuration */ TIMER_DeInit(TIMER2); TIMER_TimeBaseStructure.TIMER_Prescaler = 3; TIMER_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_TimeBaseStructure.TIMER_Period = 65535; TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_BaseInit(TIMER2,&TIMER_TimeBaseStructure); /* TIMER2 CH2 Configuration in PWM2 mode */ TIMER_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM2; TIMER_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIMER_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_RESET; TIMER_OCInitStructure.TIMER_Pulse = 11535; TIMER_OC2_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC2_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); /* TIMER2 CH1 Input Capture Configuration */ TIM_ICInitStructure.TIMER_CH = TIMER_CH_1; TIM_ICInitStructure.TIMER_ICPolarity = TIMER_IC_POLARITY_FALLING; TIM_ICInitStructure.TIMER_ICSelection = TIMER_IC_SELECTION_DIRECTTI; TIM_ICInitStructure.TIMER_ICPrescaler = TIMER_IC_PSC_DIV1; TIM_ICInitStructure.TIMER_ICFilter = 0x00; TIMER_ICInit( TIMER2, &TIM_ICInitStructure); /* Single Pulse Mode selection */ TIMER_SinglePulseMode(TIMER2,TIMER_SP_MODE_SINGLE); /* Slave Mode selection : TIMER4 */ /* TIMER2 Input trigger : External Trigger connected to TI1 */ TIMER_SelectInputTrigger( TIMER2, TIMER_TS_TI1FP1); TIMER_SelectSlaveMode( TIMER2, TIMER_SLAVE_MODE_TRIGGER); }
/** * @brief Configure system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* Configure the ADCCLK to 12MHz */ RCC_ADCCLKConfig(RCC_ADCCLK_APB2_DIV6); /* Enable DMA1 and GPIO clock */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_DMA1|RCC_AHBPERIPH_GPIOA | RCC_AHBPERIPH_GPIOC , ENABLE); /* Enable ADC and TIM2 clock */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_ADC1, ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2, ENABLE); }
/** * @brief Configure the TIMER peripheral. * @param None * @retval None */ void TIMER_Configuration(void) { /* TIMER1 DMA Transfer example ------------------------------------------------- TIMER1CLK = 72MHz, Prescaler = 72 TIMER1 counter clock = SystemCoreClock/72 = 1MHz. The objective is to configure TIMER1 channel 1 to generate PWM signal with a frequency equal to 1KHz and a variable duty cycle(25%,50%,75%) that is changed by the DMA after a specific number of Update DMA request. The number of this repetitive requests is defined by the TIMER1 Repetition counter, each 2 Update Requests, the TIMER1 Channel 1 Duty Cycle changes to the next new value defined by the buffer . -----------------------------------------------------------------------------*/ TIMER_BaseInitPara TIMER_TimeBaseStructure; TIMER_OCInitPara TIMER_OCInitStructure; /* TIMERS clock enable */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE); /* TIMER1 configuration */ TIMER_DeInit(TIMER1); TIMER_TimeBaseStructure.TIMER_Prescaler = 71; TIMER_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_TimeBaseStructure.TIMER_Period = 999; TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_TimeBaseStructure.TIMER_RepetitionCounter = 1; TIMER_BaseInit(TIMER1,&TIMER_TimeBaseStructure); /* CH1 Configuration in PWM mode */ TIMER_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM1; TIMER_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OCNPolarity = TIMER_OCN_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIMER_OCInitStructure.TIMER_OutputNState = TIMER_OUTPUTN_STATE_ENABLE; TIMER_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_SET; TIMER_OCInitStructure.TIMER_OCNIdleState = TIMER_OCN_IDLE_STATE_RESET; TIMER_OCInitStructure.TIMER_Pulse = buffer[0]; TIMER_OC1_Init(TIMER1, &TIMER_OCInitStructure); TIMER_OC1_Preload(TIMER1,TIMER_OC_PRELOAD_DISABLE); /* TIMER1 output enable */ TIMER_CtrlPWMOutputs(TIMER1,ENABLE); /* Auto-reload preload enable */ TIMER_CARLPreloadConfig(TIMER1,ENABLE); /* TIMER1 Update DMA Request enable */ TIMER_DMACmd( TIMER1, TIMER_DMA_UPDATE, ENABLE); /* TIMER enable counter*/ TIMER_Enable( TIMER1, ENABLE ); }
/** * @brief Configures the DAC. * @param None * @retval None */ void TIM2_Configuration(void) { TIMER_BaseInitPara TIM_TimeBaseStructure; RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2, ENABLE); TIM_TimeBaseStructure.TIMER_Period = 0xF; TIM_TimeBaseStructure.TIMER_Prescaler = 0xF; TIM_TimeBaseStructure.TIMER_ClockDivision = 0x0; TIM_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_BaseInit(TIMER2, &TIM_TimeBaseStructure); /* TIM2 TRGO selection */ TIMER_SelectOutputTrigger(TIMER2, TIMER_TRI_OUT_SRC_UPDATE); TIMER_Enable(TIMER2, ENABLE); }
/** * @brief Configures the different system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* DMA clock enable */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_DMA1, ENABLE); /* Enable GPIO clock */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA , ENABLE); /* Enable USART1 Clock */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_USART1, ENABLE); /* Enable USART2 Clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_USART2, ENABLE); }
/** * @brief Init the GPIO port of the LCD and LCD peripheral. * @param None * @retval None */ void LCD_Seg_Init(void) { uint16_t i; LCD_InitPara LCD_InitStructure; /* Configure the LCD GPIO pins */ LCD_GPIO_Config(); /*!< Enable the clock of LCD */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_LCD, ENABLE); for(i=0;i<500;i++); /* Configure the LCD interface */ LCD_InitStructure.LCD_Prescaler = LCD_PRESCALER_1; LCD_InitStructure.LCD_Divider = LCD_DIVIDER_16; LCD_InitStructure.LCD_Duty = LCD_DUTY_1_4; LCD_InitStructure.LCD_VBias = LCD_BIAS_1_3; LCD_InitStructure.LCD_VSRC = LCD_VOLTAGESOURCE_INTERNAL; LCD_Init(&LCD_InitStructure); /* Configure the Pulse On Duration */ LCD_PulseOnDurationConfig(LCD_PULSEON_DURATION_7); /* Configure the Datatime Period */ LCD_DeadTimeConfig(LCD_DEADTIME_PERIOD_7); /* Configure the LCD Contrast LEVEL_7(3.51V) */ LCD_ContrastConfig(LCD_CONTRAST_LEVEL_7); /* Enable high drive function */ LCD_HighDrive_Enable(ENABLE); /* Loop until SYNF flag is set */ while ((LCD->SFR & LCD_FLAG_SYNF) == (uint32_t)RESET) { } /* Enable LCD peripheral */ LCD_Enable(ENABLE); /* Wait the LCD is enable */ while(!(LCD_GetBitState(LCD_FLAG_ONF))) { } /* Wait the LCD CFGR register synchronization */ // while(!(LCD_GetBitState(LCD_FLAG_VRDYF))) // { // } }
/** * @brief Main program. * @param None * @retval None */ int main(void) { /* Initialize four LEDs mounted on GD32107C-EVAL board */ LED_Init(); /* Enable PWR and BKP clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR | RCC_APB1PERIPH_BKP, ENABLE); /* Enable write access to the registers in Backup domain */ PWR_BackupAccess_Enable(ENABLE); /* Clear the bit flag of Tamper Event */ BKP_ClearBitState(); /* Check if the POR/PDR reset flag is set */ if(RCC_GetBitState(RCC_FLAG_POPDRST) != RESET) { /* Clear the RCC all reset flags */ RCC_ClearBitState(); /* Turn on LED4 */ GPIO_SetBits(GPIOE, GPIO_PIN_0); /* Check if Backup data registers has been written */ if(CheckBackupReg(0x1226) == 0x00) { /* Backup data registers values are correct */ /* Turn on LED2 */ GPIO_SetBits(GPIOC, GPIO_PIN_0); } else { /* Backup data registers values are not correct or they are not written*/ /* Write data to Backup data registers */ WriteToBackupReg(0x1226); /* Turn on LED3 */ GPIO_SetBits(GPIOC, GPIO_PIN_2); } } /* Turn on LED5 */ GPIO_SetBits(GPIOE, GPIO_PIN_1); while (1) { } }
/** * @brief Configure the TIMER peripheral. * @param None * @retval None */ void TIMER_Configuration(void) { /* --------------------------------------------------------------- TIMER2 Configuration: TIMER2CLK = SystemCoreClock / 36000 = 2K, And generate 3 signals with 3 different delays: TIMER2_CH1 delay = 4000/2000 = 2s TIMER2_CH2 delay = 8000/2000 = 4s TIMER2_CH3 delay = 12000/2000 = 6s --------------------------------------------------------------- */ TIMER_BaseInitPara TIMER_TimeBaseStructure; TIMER_OCInitPara TIMER_OCInitStructure; /* TIMERS clock enable */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE); /* TIMER2 configuration */ TIMER_DeInit(TIMER2); TIMER_TimeBaseStructure.TIMER_Prescaler = 35999; TIMER_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_TimeBaseStructure.TIMER_Period = 19999; TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_BaseInit(TIMER2,&TIMER_TimeBaseStructure); /* CH1,CH2 and CH3 Configuration in OC_ACTIVE mode */ TIMER_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_ACTIVE; TIMER_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIMER_OCInitStructure.TIMER_Pulse = 3999; TIMER_OC1_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC1_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); TIMER_OCInitStructure.TIMER_Pulse = 7999; TIMER_OC2_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC2_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); TIMER_OCInitStructure.TIMER_Pulse = 11999; TIMER_OC3_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC3_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); /* Auto-reload preload enable */ TIMER_CARLPreloadConfig(TIMER2,ENABLE); /* TIMER enable counter*/ TIMER_Enable( TIMER2, ENABLE ); }
void I2C_GPIO_init(void) { GPIO_InitPara GPIO_InitStructure; I2C_InitPara I2C_InitStructure; /* Enable GPIOB clock */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB,ENABLE); /* Enable BOARD_I2C APB1 clock */ RCC_APB1PeriphClock_Enable(I2C_RCC,ENABLE); /* BOARD_I2C GPIO ports*/ GPIO_InitStructure.GPIO_Pin = I2C_SCL_GPIO_PIN | I2C_SDA_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB,I2C_SCL_GPIO_PINSOURCE,GPIO_AF_1); GPIO_PinAFConfig(GPIOB,I2C_SDA_GPIO_PINSOURCE,GPIO_AF_1); // In order to not encounter the I2C BUSY jam, Manually Reset the I2C after GPIO set, before I2C configure. I2C_SoftwareReset_Enable(BOARD_I2C, ENABLE); I2C_SoftwareReset_Enable(BOARD_I2C, DISABLE); I2C_InitStructure.I2C_Protocol = I2C_PROTOCOL_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE_2; I2C_InitStructure.I2C_BitRate = I2C_CLK_HZ; I2C_InitStructure.I2C_AddressingMode = I2C_ADDRESSING_MODE_7BIT; I2C_InitStructure.I2C_DeviceAddress = I2C_OWN_ADDRESS7; I2C_Init(BOARD_I2C, &I2C_InitStructure); I2C_Enable(BOARD_I2C,ENABLE); /* Enable I2C2 */ I2C_Acknowledge_Enable(BOARD_I2C,DISABLE); /* The software must wait until I2C Bus is idle */ #ifdef DBG_OLED_BLOCK while(I2C_GetBitState(BOARD_I2C,I2C_FLAG_I2CBSY)); #else I2C_GetBitState_Timeout(BOARD_I2C,I2C_FLAG_I2CBSY); #endif }
/** * @brief Configure the TIMER peripheral. * @param None * @retval None */ void TIMER_Configuration(void) { /* ----------------------------------------------------------------------- TIMER2 Configuration: generate 3 PWM signals with 3 different duty cycles: TIMER2CLK = SystemCoreClock / 72 = 1MHz TIMER2 Channel2 duty cycle = (4000/ 16000)* 100 = 25% TIMER2 Channel3 duty cycle = (8000/ 16000)* 100 = 50% TIMER2 Channel4 duty cycle = (12000/ 16000)* 100 = 75% ----------------------------------------------------------------------- */ TIMER_BaseInitPara TIMER_TimeBaseStructure; TIMER_OCInitPara TIMER_OCInitStructure; /* TIMERS clock enable */ RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1|RCC_APB2PERIPH_TIMER15|RCC_APB2PERIPH_TIMER16|RCC_APB2PERIPH_TIMER17,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2|RCC_APB1PERIPH_TIMER3|RCC_APB1PERIPH_TIMER6|RCC_APB1PERIPH_TIMER14,ENABLE); /* TIMER2 configuration */ TIMER_DeInit(TIMER2); TIMER_TimeBaseStructure.TIMER_Prescaler = 71; TIMER_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIMER_TimeBaseStructure.TIMER_Period = 15999; TIMER_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_BaseInit(TIMER2,&TIMER_TimeBaseStructure); /* CH2,CH3 and CH4 Configuration in PWM mode */ TIMER_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM1; TIMER_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIMER_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIMER_OCInitStructure.TIMER_Pulse = 3999; TIMER_OC2_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC2_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); TIMER_OCInitStructure.TIMER_Pulse = 7999; TIMER_OC3_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC3_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); TIMER_OCInitStructure.TIMER_Pulse = 11999; TIMER_OC4_Init(TIMER2, &TIMER_OCInitStructure); TIMER_OC4_Preload(TIMER2,TIMER_OC_PRELOAD_DISABLE); /* Auto-reload preload enable */ TIMER_CARLPreloadConfig(TIMER2,ENABLE); /* TIMER enable counter*/ TIMER_Enable( TIMER2, ENABLE ); }
/** * @brief Start Bit Method to Wake Up USART from DeepSleep mode Test. * @param None * @retval None */ static void WakeUp_StartBitMethod(void) { /* Configure the wake up Method = Start bit */ USART_DEEPSLEEPModeWakeUpSourceConfig(USART1, USART_WAKEUPSOURCE_STARTBIT); /* Enable USART1 */ USART_Enable(USART1, ENABLE); /* Before entering the USART in STOP mode the REACK flag must be checked to ensure the USART RX is ready */ while(USART_GetBitState(USART1, USART_FLAG_REA) == RESET) {} /* Enable USART STOP mode by setting the UESM bit in the CTLR1 register.*/ USART_DEEPSLEEPModeEnable(USART1, ENABLE); /* Enable the wake up from stop Interrupt */ USART_INT_Set(USART1, USART_INT_WU, ENABLE); /* Enable PWR APB clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /*Enter Deep-sleep mode*/ PWR_DEEPSLEEPMode_Entry(PWR_LDO_LOWPOWER, PWR_DEEPSLEEPENTRY_WFI); /* Waiting Wake Up interrupt */ while(InterruptCounter == 0x00) {} /* Disable USART peripheral in DEEPSLEEP mode */ USART_DEEPSLEEPModeEnable(USART1, DISABLE); while(USART_GetBitState(USART1, USART_FLAG_RBNE) == RESET) {} DataReceived = USART_DataReceive(USART1); /* Clear the TEN bit (if a transmission is on going or a data is in the TDR, it will be sent before efectivelly disabling the transmission) */ USART_TransferDirection_Enable(USART1, USART_RXORTX_TX, DISABLE); /* Check the Transfer Complete Flag */ while (USART_GetBitState(USART1, USART_FLAG_TC) == RESET) {} /* USART Disable */ USART_Enable(USART1, DISABLE); }
/** * @brief Configure system clocks. * @param None * @retval None */ void RCC_Configuration(void) { /* GPIOA, GPIOB, GPIOC and GPIOF clocks enable */ RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA | RCC_AHBPERIPH_GPIOB | RCC_AHBPERIPH_GPIOC | RCC_AHBPERIPH_GPIOF , ENABLE); /* PWR clocks enable */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /* Enable LSI clocks and select LSI as the clock for LCD */ PWR_BackupAccess_Enable(ENABLE); RCC_LSI_Enable(ENABLE); while(RCC_GetBitState(RCC_FLAG_LSISTB) == RESET) { } RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI); }
/** * @brief Main program. * @param None * @retval None */ int main(void) { GPIO_InitPara GPIO_InitStructure; /* Configure the LED1 GPIO */ GD_EVAL_LEDInit(LED1); /* Turn on LED1 */ GD_EVAL_LEDOn(LED1); /* Enable PWR clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_PWR, ENABLE); /* Configure the EXTI line16 */ EXTI_Configuration(); /* NVIC configuration */ NVIC_Configuration(); /* Configure the LVD threshold to 2.9V(GD32F130_150) or 4.5V(GD32F170_190), and enable the LVD */ PWR_LVDConfig(PWR_LVDT_7, ENABLE); while(1) { } }
void EvbUart2Config(void) { /* Configure the GPIO ports */ GPIO_InitPara GPIO_InitStructure; USART_InitPara USART_InitStructure; /* Enable GPIO clock */ RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOA, ENABLE); /* Enable USART APB clock */ RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_USART2, ENABLE); /* Connect PXx to USARTx_Tx */ GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE2, GPIO_AF_1); /* Connect PXx to USARTx_Rx */ GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE3, GPIO_AF_1); /* Configure USART Rx/Tx as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL; GPIO_Init(GPIOA , &GPIO_InitStructure); USART_DeInit( USART2 ); USART_InitStructure.USART_BRR = 115200; USART_InitStructure.USART_WL = USART_WL_8B; USART_InitStructure.USART_STBits = USART_STBITS_1; USART_InitStructure.USART_Parity = USART_PARITY_RESET; USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE; USART_InitStructure.USART_RxorTx = USART_RXORTX_RX | USART_RXORTX_TX; USART_Init(USART2, &USART_InitStructure); /* USART enable */ USART_Enable(USART2, ENABLE); }
void serial_init(void) { //RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA , ENABLE ); RCC_APB1PeriphClock_Enable( RCC_APB1PERIPH_USART2 , ENABLE ); GPIO_InitPara GPIO_InitStructure; GPIO_PinAFConfig( GPIOA , GPIO_PINSOURCE2, GPIO_AF_1 ); GPIO_PinAFConfig( GPIOA , GPIO_PINSOURCE3, GPIO_AF_1 ); GPIO_InitStructure.GPIO_Pin = GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL; GPIO_Init( GPIOA , &GPIO_InitStructure); USART_InitPara USART_InitStructure; USART_InitStructure.USART_BRR = 57600; USART_InitStructure.USART_WL = USART_WL_8B; USART_InitStructure.USART_STBits = USART_STBITS_1; USART_InitStructure.USART_Parity = USART_PARITY_RESET; USART_InitStructure.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE; USART_InitStructure.USART_RxorTx = USART_RXORTX_TX; USART_Init(USART2, &USART_InitStructure); USART_Enable(USART2, ENABLE); USART_INT_Set(USART2, USART_INT_TC , ENABLE); // USART_INT_TBE }
void pwm_init(void) { GPIO_InitPara GPIO_InitStructure; // timer 3 pin PB1 config ( ch4 ) GPIO_InitStructure.GPIO_Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLDOWN; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_PinAFConfig(GPIOB,GPIO_PINSOURCE1,GPIO_AF_1); // GPIO pins PA8 , 9 ,10 setup ( Timer1 ch 1 , 2 , 3) GPIO_InitStructure.GPIO_Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PINSOURCE8,GPIO_AF_2); GPIO_PinAFConfig(GPIOA,GPIO_PINSOURCE9,GPIO_AF_2); GPIO_PinAFConfig(GPIOA,GPIO_PINSOURCE10,GPIO_AF_2); TIMER_BaseInitPara TIM_TimeBaseStructure; RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER3,ENABLE); // TIMER3 for pins A8 A9 A10 TIM_TimeBaseStructure.TIMER_Prescaler = TIMER_PRESCALER - 1; // TIM_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_UP; TIM_TimeBaseStructure.TIMER_Period = PWMTOP; TIM_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; TIMER_BaseInit(TIMER3,&TIM_TimeBaseStructure); //Ch1 , 2 , 3 TIM_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM1; TIM_OCInitStructure.TIMER_OCPolarity = OUT_POLARITY; TIM_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIM_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_RESET; TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC4_Init(TIMER3, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER3,ENABLE); TIMER_CARLPreloadConfig(TIMER3,ENABLE); TIMER_Enable( TIMER3, ENABLE ); TIMER_BaseInit(TIMER1,&TIM_TimeBaseStructure); TIMER_OC1_Init(TIMER1, &TIM_OCInitStructure); TIMER_OC2_Init(TIMER1, &TIM_OCInitStructure); TIMER_OC3_Init(TIMER1, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER1,ENABLE); TIMER_CARLPreloadConfig(TIMER1,ENABLE); TIMER_OC1_Preload(TIMER1,ESC_PRELOAD); TIMER_OC2_Preload(TIMER1,ESC_PRELOAD); TIMER_OC3_Preload(TIMER1,ESC_PRELOAD); TIMER_OC4_Preload(TIMER3,ESC_PRELOAD); TIMER_Enable( TIMER1, ENABLE ); }
void pwm_init(void) { GPIO_InitPara GPIO_InitStructure; //pin A0 TM2_ch1 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLDOWN; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE1, GPIO_AF_2); TIMER_BaseInitPara TIM_TimeBaseStructure; RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_TIMER2 | RCC_APB1PERIPH_TIMER14 | RCC_APB1PERIPH_TIMER3, ENABLE); RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_TIMER1, ENABLE); // timer 2 TIM_TimeBaseStructure.TIMER_Prescaler = TIMER_PRESCALER - 1; // TIM_TimeBaseStructure.TIMER_CounterMode = TIMER_COUNTER_CENTER_ALIGNED2; TIM_TimeBaseStructure.TIMER_Period = PWMTOP; TIM_TimeBaseStructure.TIMER_ClockDivision = TIMER_CDIV_DIV1; // init timer 2 TIMER_BaseInit(TIMER2, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIMER_OCMode = TIMER_OC_MODE_PWM1; TIM_OCInitStructure.TIMER_OCPolarity = TIMER_OC_POLARITY_HIGH; TIM_OCInitStructure.TIMER_OutputState = TIMER_OUTPUT_STATE_ENABLE; TIM_OCInitStructure.TIMER_OCIdleState = TIMER_OC_IDLE_STATE_RESET; TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC2_Init(TIMER2, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER2, ENABLE); TIMER_CARLPreloadConfig(TIMER2, ENABLE); TIMER_OC2_Preload(TIMER2, TIMER_OC_PRELOAD_DISABLE); // pin A3 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_3; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE3, GPIO_AF_2); TIMER_OC4_Init(TIMER2, &TIM_OCInitStructure); TIMER_OC4_Preload(TIMER2, TIMER_OC_PRELOAD_DISABLE); // TIMER_Enable( TIMER2, ENABLE ); // timer 1 ch3 , ch1 // pins A10 , A8 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_10 | GPIO_PIN_8; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE10, GPIO_AF_2); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE8, GPIO_AF_2); // timer 1 // init timer 1 TIMER_BaseInit(TIMER1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC3_Init(TIMER1, &TIM_OCInitStructure); TIMER_OC1_Init(TIMER1, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER1, ENABLE); TIMER_CARLPreloadConfig(TIMER1, ENABLE); TIMER_OC3_Preload(TIMER1, TIMER_OC_PRELOAD_DISABLE); TIMER_OC1_Preload(TIMER1, TIMER_OC_PRELOAD_DISABLE); // bridge dir 2 /////////////// //pin A9 TM1_ch2 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_9; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE9, GPIO_AF_2); // timer 1 // init timer 1 TIMER_BaseInit(TIMER1, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC2_Init(TIMER2, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER1, ENABLE); TIMER_CARLPreloadConfig(TIMER1, ENABLE); TIMER_OC2_Preload(TIMER1, TIMER_OC_PRELOAD_DISABLE); // timer 3 PB1 af1 ch4 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_1; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PINSOURCE1, GPIO_AF_1); // timer 3 // init timer 3 TIMER_BaseInit(TIMER3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC4_Init(TIMER3, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER3, ENABLE); TIMER_CARLPreloadConfig(TIMER3, ENABLE); TIMER_OC4_Preload(TIMER3, TIMER_OC_PRELOAD_DISABLE); // A0 // Timer2 ch1 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE0, GPIO_AF_2); // timer 2 // init timer 2 TIMER_BaseInit(TIMER2, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIMER_Pulse = 0; TIMER_OC1_Init(TIMER2, &TIM_OCInitStructure); TIMER_CtrlPWMOutputs(TIMER2, ENABLE); TIMER_CARLPreloadConfig(TIMER2, ENABLE); TIMER_OC1_Preload(TIMER2, TIMER_OC_PRELOAD_DISABLE); // PA2 tm2 ch3 GPIO_InitStructure.GPIO_Pin = GPIO_PIN_2; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PINSOURCE2, GPIO_AF_2); TIMER_OC3_Init(TIMER2, &TIM_OCInitStructure); TIMER_OC3_Preload(TIMER2, TIMER_OC_PRELOAD_DISABLE); TIMER_Enable(TIMER3, ENABLE); TIMER_Enable(TIMER1, ENABLE); TIMER_Enable(TIMER2, ENABLE); }
void i2c_init(void) { // RCC_AHBPeriphClock_Enable(RCC_AHBPERIPH_GPIOB,ENABLE); RCC_APB1PeriphClock_Enable(RCC_APB1PERIPH_I2C1, ENABLE); GPIO_InitPara GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6 | GPIO_PIN_7; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLUP; GPIO_Init(GPIOB, &GPIO_InitStructure); // the following checks deal with issues arrising from i2c being stopped while the gyro is sending data // this happens mainly in debug mode and perhaps at low voltage reset int i2cfail = 0; // sda is set with pullup // if sda is low the gyro might have become stuck while waiting for clock(and is sending a "zero") if (Bit_RESET == GPIO_ReadInputBit(GPIOB, GPIO_PIN_7)) { i2cfail = 1; } delay(10); GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLDOWN; GPIO_Init(GPIOB, &GPIO_InitStructure); // sda is set with pulldown // if sda is high it could be because the gyro is stuck sending data if (Bit_SET == GPIO_ReadInputBit(GPIOB, GPIO_PIN_7)) { i2cfail = 1; } if (i2cfail) { // set sda pullup so it sends an ack GPIO_InitStructure.GPIO_Pin = GPIO_PIN_7; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLUP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLUP; GPIO_Init(GPIOB, &GPIO_InitStructure); delay(10); for (int i = 0; i < 18; i++) { // send 9 clock pulses on scl to clear any pending byte GPIO_WriteBit(GPIOB, GPIO_PIN_6, Bit_RESET); delay(25); GPIO_WriteBit(GPIOB, GPIO_PIN_6, Bit_SET); delay(5); if (Bit_RESET != GPIO_ReadInputBit(GPIOB, GPIO_PIN_7)) { break; } } } // actual i2c setup GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6 | GPIO_PIN_7; GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF; GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ; GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_OD; GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_PULLUP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PINSOURCE6, GPIO_AF_1); GPIO_PinAFConfig(GPIOB, GPIO_PINSOURCE7, GPIO_AF_1); I2C_InitPara I2C_InitStructure; I2C_InitStructure.I2C_Protocol = I2C_PROTOCOL_I2C; I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE_2; I2C_InitStructure.I2C_BitRate = 400000; I2C_InitStructure.I2C_AddressingMode = I2C_ADDRESSING_MODE_7BIT; I2C_InitStructure.I2C_DeviceAddress = 0x24; I2C_Init(I2C1, &I2C_InitStructure); I2C_Enable(I2C1, ENABLE); I2C_Acknowledge_Enable(I2C1, DISABLE); I2C_NACKPosition_Enable(I2C1, I2C_NACKPOSITION_CURRENT); }