#include "stm32f10x.h"
uint32_t counter,cc_register;
uint16_t duty_tab[8]={10,100,250,500,750,10,900,500};
int main () {
//--- RCC - Reset Clock Control
RCC->APB2ENR |= (1<<2) | (1<<0); //wlacz sygnal zegarowy GPIOA i AFIO
RCC->APB1ENR |= (1<<1) | (1<<0); //wlacz sygnal zegarowy timer TIM2 i TIM3
//--- 1 wlacz DMA1
RCC->AHBENR |= (1 << 0);
//--- konfiguracja portu A
//linia A6 - alternate function output push-pull
GPIOA->CRL &= ~(15<<24);
GPIOA->CRL |= (1<<24);
GPIOA->CRL |= (2<<26);
// taktowanie timerow - 9 MHz
//--- konfiguracja timera TIM2 - inicjowanie transferow DMA co 0.5 sekundy
TIM2->PSC = 8999; // preskaler
TIM2->ARR = 499; // pojemnosc licznika (Auto Reload)
TIM2->DIER |= 1<<8; // DMA/IRQ Enable Register - enable update DMA request
TIM2->CR1
|= 1; // wlacz timer TIM2
//--- konfiguracja timera TIM3 - generowanie fali prostokatnej + Pulse Width Modulation (PWM)
TIM3->PSC = 899;
TIM3->ARR = 999;
TIM3->CCMR1 |= (6<<4); // bity 6:4 PWM mode 1
TIM3->CCER |= (0<<1)|(1<<0); // wlacz kanal 1, ustaw polaryzacje wyjscia
TIM3->CR1 |= 1; // wlacz timer TIM3
//--- konfiguracja DMA Direct Memory Access
//--- 2 - ustaw w CCR bity:
// 4 - kierunek przeplywu danych
DMA1_Channel2->CCR |= 1<<4;
// 5 - wlacz tryb pierscieniowy
DMA1_Channel2->CCR |= 1<<5;
// 7 - modyfikuj wskaznik adresu w pamieci
DMA1_Channel2->CCR |= 1<<7;
// 11-10 i 9-8 - okresl typ danych - na podstawie typu elementow tablicy duty_tab
DMA1_Channel2->CCR |= 0<<9;
DMA1_Channel2->CCR |= 1<<8;
DMA1_Channel2->CCR |= 0<<11;
DMA1_Channel2->CCR |= 1<<10;
// DMA1_Channel2->CCR =
//--- 3 ustaw liczbe elementow (tablicy)
DMA1_Channel2->CNDTR = 0x08;
DMA1_Channel2->CPAR =(uint32_t)&(TIM3->CCR1); // wskaznik na adres docelowy - urzadzenia peryferyjnego
DMA1_Channel2->CMAR =(uint32_t)duty_tab; // wskaznik na adres zdrodlowy - tablice (w pamieci RAM)
DMA1_Channel2->CCR |= 1; // wlacz odpowiedni kanal DMA
for(;;) {
// skopiuj rejestry timera 3 do zmiennych globalnych - tylko w celu wizualizacji w symulatorze
counter = TIM3->CNT;
cc_register=TIM3->CCR1;
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}