/**
******************************************************************************
* @file : main.c
* @author : Fernando Hermosillo Reynoso
* @brief : Main program body
******************************************************************************
*/
#include <stdint.h>
#include "stm32f103_hal.h"
/* Variables --------------------------------------*/
/* Funciones privadas -----------------------------*/
void delay_ms(uint16_t ms) {
volatile unsigned long t = 0;
for(uint16_t i = 0; i < ms; i++)
{
for(t = 0; t < 800; t++);
}
}
void delay_us(uint16_t us)
{
for (volatile unsigned int cycles = 0; cycles < us; cycles++);
}
/* Codigo principal -------------------------------*/
int main(void)
{
// RCC config
rcc_clock_enable(RCC_TIM3);
rcc_clock_enable(RCC_GPIOA);
/* PWM Config */
// TIM config (Frequency of 1000Hz with ticks of 1us/1MHz)
timer_init(TIM2, TIMER_MODE_UP, 199, 7); // ARR=999, PSC=7
timer_set_oc_channel(
TIM2, // TIMER3
TIMER_CHANNEL_3, // T3C1 (PA6)
TIMER_OC_PWM1, // OC Mode: PWM1
TIMER_OC_POLARITY_HIGH, // Polarity: Active high
100, // CCR1=500 (CCR1 <= ARR)
true); // Output enabled
//timer_set_interrupt(TIM3, TIMER_IRQ_CC1, IRQ_ENABLE);
//nvic_enable_irq(TIM3_IRQn);
timer_start(TIM3, TIMER_CONTINUOUS);
// Loop
//timer_set_compare_value(TIM3, TIMER_CHANNEL_1, 250);
while (1)
{
}
}
/* IRQ Handlers */
void TIM3_IRQHandler()
{
// If CCx interrupt is enabled, when TIMx->CNT reaches ARR it raises an interrupt
if(TIM3->SR & TIM_SR_CC1IF)
{
TIM3->SR = ~TIM_SR_CC1IF;
GPIOC->ODR ^= 1 << 13;
}
}Loading
stm32-bluepill
stm32-bluepill