Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h"
- #define F_CLK 168000000
- void TIM4_IRQHandler ()
- {
- if(TIM4->SR & TIM_SR_CC1IF)
- {
- TIM4->SR &= ~(TIM_SR_CC1IF);
- GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- }
- else if(TIM4->SR & TIM_SR_CC2IF)
- {
- TIM4->SR &= ~(TIM_SR_CC2IF);
- GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- }
- else if(TIM4->SR & TIM_SR_CC3IF)
- {
- TIM4->SR &= ~(TIM_SR_CC3IF);
- GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- }
- else if(TIM4->SR & TIM_SR_CC4IF)
- {
- TIM4->SR &= ~(TIM_SR_CC4IF);
- GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- }
- }
- void TIM4_Init()
- {
- NVIC_EnableIRQ(TIM4_IRQn);
- RCC->APB1ENR |= (RCC_APB1ENR_TIM4EN); //
- TIM4->PSC = 8400; // prescaler 8400 -> clocking 10kHz
- TIM4->ARR = 9900; // 10kHz/1000 gives 1Hz - > 1s interrupts
- TIM4->CCR1 = 0;
- TIM4->CCR2 = 990;
- TIM4->CCR3 = 3600;
- TIM4->CCR4 = 7200;
- TIM4->DIER |= (TIM_DIER_CC4IE | TIM_DIER_CC3IE | TIM_DIER_CC2IE | TIM_DIER_CC1IE);
- TIM4->CR1 |= (TIM_CR1_CEN);
- }
- void IRQ_Handler_Systick(int ticks)
- {
- static int state = 0;
- switch(state){
- case 0:
- //GPIOD->ODR ^= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- state = 1;
- break;
- case 1:
- //GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- if(ticks == 3)
- {
- state = 2;
- }
- break;
- case 2:
- // GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- if(ticks == 9)
- state = 3;
- break;
- case 3:
- //GPIOD->ODR &= ~(GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- state = 0;
- break;
- default:
- break;
- }
- }
- void SysTick_Handler(void)
- {
- static uint16_t counts = 0;
- IRQ_Handler_Systick(counts++);
- if( counts == 10)
- {
- counts = 0;
- }
- }
- void SetTick_ms(uint32_t timeMs)
- {
- SysTick->LOAD = (((float)F_CLK/8)*0.001*timeMs); //load 1ms resolution
- SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos);
- }
- void TIM4_Init_PWM()
- {
- NVIC_EnableIRQ(TIM4_IRQn);
- RCC->APB1ENR |= (RCC_APB1ENR_TIM4EN); //
- RCC->CFGR |= RCC_CFGR_PPRE1_DIV4;
- TIM4->ARR = 8400; //
- TIM4->CCR1 = 0;
- TIM4->CCR2 = 193;
- TIM4->CCR3 = 2100;
- TIM4->CCR4 = 6300;
- TIM4->CCMR1 |= (TIM_CCMR1_OC1M_1 |TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC2M_1| TIM_CCMR1_OC2M_2);
- TIM4->CCMR2 |= ( TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2);
- TIM4->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
- TIM4->CR1 |= (TIM_CR1_CEN);
- }
- void Brightness_Increase()
- {
- static uint16_t brightness = 0;
- brightness = (brightness + 840);
- if (brightness > TIM4->ARR)
- brightness = 0;
- TIM4->CCR1 = brightness;
- }
- void TIM7_IRQHandler(){
- static int state = 0;
- TIM7->SR = 0;
- switch (state){
- case 0:
- if((GPIOA->IDR & 1))
- state++;
- else
- state = 0;
- break;
- case 1:
- if((GPIOA->IDR & 1))
- {
- state++;
- }
- else
- state = 0;
- case 2:
- if((GPIOA->IDR & 1))
- {
- state++;
- }
- else
- state = 0;
- break;
- case 3:
- state++;
- Brightness_Increase();
- break;
- case 4:
- if(!(GPIOA->IDR & 1))
- {
- state++;
- }
- break;
- case 5:
- if(!(GPIOA->IDR & 1))
- {
- state++;
- }
- break;
- case 6:
- if(!(GPIOA->IDR & 1))
- {
- state=0;
- }
- break;
- default:
- break;
- }
- }
- void TIM7_Init_IT()
- {
- RCC->APB1ENR |= (RCC_APB1ENR_TIM7EN); //
- TIM7->PSC = 8400; // prescaler 8399 -> clocking 10kHz
- TIM7->ARR = 200;
- TIM7->DIER |= (TIM_DIER_UIE);
- NVIC_EnableIRQ(TIM7_IRQn);
- TIM7->CR1 |= (TIM_CR1_CEN);
- }
- void wait(uint32_t timeMs)
- {
- uint16_t mscounter = 1;
- uint16_t scounter = 0;
- float valueToLoad = (((float)F_CLK/8)*0.001); //load 1ms resolution
- SysTick->LOAD = valueToLoad;
- SysTick->CTRL |= (1 << SysTick_CTRL_ENABLE_Pos);
- while(timeMs != mscounter+1000*scounter)
- {
- if(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)
- {
- mscounter++;
- if(mscounter % 1001 == 0)
- {
- scounter++;
- mscounter = 1;
- }
- }
- }
- }
- int main(){
- RCC->CR |= (RCC_CR_HSEBYP | RCC_CR_HSEON);
- RCC->CR &= ~(RCC_CR_PLLON); // PLL OFF
- RCC->PLLCFGR = (RCC_PLLCFGR_PLLSRC_HSE);
- RCC->PLLCFGR |= ((168<<6) | 4);
- RCC->CR |= (RCC_CR_PLLON);
- FLASH->ACR |= FLASH_ACR_DCEN;
- FLASH->ACR |= FLASH_ACR_DCEN;
- FLASH->ACR |= FLASH_ACR_ICEN;
- FLASH->ACR |= FLASH_ACR_PRFTEN;
- FLASH->ACR |= 6;
- RCC->CFGR |= (RCC_CFGR_SW_1);
- SysTick->CTRL |= (1<< SysTick_CTRL_TICKINT_Pos); // Enable intterupts request
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; // GPIOA on
- GPIOD->AFR[1] |= (( 0x2222 << 16));
- GPIOD->MODER |= (GPIO_MODER_MODER15_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER12_1 | GPIO_MODER_MODER10_1);
- GPIOD->ODR |= (GPIO_ODR_ODR_15 | GPIO_ODR_ODR_14 | GPIO_ODR_ODR_13 | GPIO_ODR_ODR_12);
- SetTick_ms(100);
- //TIM4_Init();
- TIM4_Init_PWM();
- TIM7_Init_IT();
- while(1)
- ;
- return 0;
- }
- /*
- Timer1 podlaczyc PWM do ledow 1% 5% 50% 99% Duty cycle,
- 10kHz
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement