На STM32F4Discovery запускаю вот такую программку:
Код: Выделить всё
#include "stm32f4xx.h"
#include "system_stm32f4xx.h"
#define TAB_SIZE 10
uint16_t SinusTable[TAB_SIZE] = {
3000,
4763,
5853,
5853,
4763,
3000,
1237,
147,
147,
1237,
};
void InitGPIO(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;
GPIOC->MODER |= GPIO_MODER_MODER6_1;
GPIOC->OTYPER &= ~GPIO_OTYPER_OT_6;
GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR6;
GPIOC->AFR[0] = 0x03000000; // TIM8 CH1 connected to pin PC6 (AF3)
}
void InitTIM(void)
{
RCC->APB2ENR |= RCC_APB2ENR_TIM8EN;
TIM8->ARR = 6000;
TIM8->CNT = 0;
TIM8->PSC = 0;
TIM8->CCER |= TIM_CCER_CC1E;
TIM8->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1);
TIM8->BDTR |= TIM_BDTR_MOE;
TIM8->CR1 |= TIM_CR1_CEN;
}
void InitAll(void)
{
InitGPIO();
InitTIM();
}
int main(void)
{
uint16_t i = 0;
InitAll();
for (;;) {
if (TIM8->SR & TIM_SR_CC1IF) {
TIM8->SR &= ~TIM_SR_CC1IF;
TIM8->CCR1 = SinusTable[i];
i++;
i %= TAB_SIZE;
}
}
}
На ножку PC6 повесил RC-фильтр нч: 1к, 100нф. На выходе наблюдается что-то более-менее похожее на синусоиду. Потом в массив SinusTable, вместо таблицы синусов, записываю линейно нарастающую последовательность чисел, в надежде увидеть пилу, но вместо пилы вижу постоянку 2.5 вольта с мелким шумом. На самой ножке, до фильтра, присутствует ШИМ сигнал с изменяющимся по линейному закону коэффициентом заполнения. Правильно ли я понимаю, что это происходит потому что конденсатор не успевает разряжаться?
