/**
******************************************************************************
* @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 */
// Fclk=8MHz
// PSC=7
// Ftim=Fclk/(PSC + 1) = 1MHz -> 1us
// F=1000Hz -> T = 1ms = 1000us
// TIM config (Frequency of 1000Hz with ticks of 1us/1MHz)
timer_init(TIM3, TIMER_MODE_UP, 999, 7); // ARR=999, PSC=7
timer_set_oc_channel(
TIM3, // TIMER3
TIMER_CHANNEL_1, // T3C1 (PA6)
TIMER_OC_PWM1, // OC Mode: PWM1
TIMER_OC_POLARITY_HIGH, // Polarity: Active high
500, // CCR1=500 (CCR1 <= ARR)
true); // Output enabled
timer_start(TIM3, TIMER_CONTINUOUS);
// Loop
/* Change duty cycle to
* 1000 * CCR1/(ARR+1) = 100 * 250/1000 = 25%
*/
timer_set_compare_value(TIM3, TIMER_CHANNEL_1, 250);
//TIM3->CCR1 = 250;
while (1)
{
}
}