Код
#include "stm32f10x_map.h"
#define RCC_APB1ENR_TIM4EN ((u32)(2))
#define RCC_APB2ENR_IOPAEN ((u32)(2))
#define RCC_APB2ENR_IOPBEN ((u32)(3))
#define RCC_APB2ENR_AFIOEN ((u32)(0))
#define RCC_CFGR_ADCPRE ((u32)(14))
#define RCC_CFGR_PPRE1 ((u32)(8))
#define AF_PP_50 ((u32)(11))
#define CFG_PIN7 ((u32)(28))
#define TIM_CCER_CC1E ((u32)(0))
#define TIM_CCER_CC2E ((u32)(4))
#define OC_MODE_PWM1 ((u32)(6))
#define TIM_CCMR1_OC1M ((u32)(4))
#define TIM_CCMR1_OC2M ((u32)(12))
#define TIM_CR1_CEN ((u32)(0))
#define TIM_CR1_ARPE ((u32)(7))
int main()
{
RCC->AHBENR=0;
RCC->APB1ENR=
(1<<RCC_APB1ENR_TIM4EN);
RCC->APB2ENR=
(1<<RCC_APB2ENR_IOPAEN)
|(1<<RCC_APB2ENR_IOPBEN)
|(1<<RCC_APB2ENR_AFIOEN);
RCC->CFGR=
(3<<RCC_CFGR_ADCPRE)
|(4<<RCC_CFGR_PPRE1);
GPIOB->CRL=(AF_PP_50<<CFG_PIN7); // T4_C2
TIM4->ARR=(12000000/75000)-1; // запись периода
TIM4->PSC=0; // запись базы
TIM4->CCR1=10; // длительность импульса DIM0
TIM4->CCR2=20; // длительность импульса DIM1
TIM4->CCER=
(1<<TIM_CCER_CC1E)
|(1<<TIM_CCER_CC2E); // разрешить первый и второй выходы сравнения
TIM4->CCMR1=
(OC_MODE_PWM1<<TIM_CCMR1_OC1M) // режим ШИМ для первого канала
|(OC_MODE_PWM1<<TIM_CCMR1_OC2M); // режим ШИМ для второго канала
TIM4->CNT=0;
TIM4->CR2=0;
TIM4->CR1=
(1<<TIM_CR1_CEN) // разрешить счет
|(1<<TIM_CR1_ARPE); // разрешить автоматическую перезагрузку
while(1);
}
В Keil даже симулируется...
АХТУНГ!
А есть ли четвертый таймер у 103T8?