Zase STM32

Jan Waclawek konfera na efton.sk
Neděle Listopad 29 20:30:59 CET 2020


https://github.com/STMicroelectronics/STM32CubeF0/tree/master/Drivers/CMSIS/Device/ST/STM32F0xx/Include

Mozno sa da #includnut priamo stm32f030x6.h - ja to pouzivam
sprostredkovane z stm32f0xx.h po #define prislusneho mcu.

Tento subor dalej #includuje system_stm32f0xx.h  - ten pre jednoduchost si
vytvorim sam vlastny, uplne prazdny, lebo hento obsahuje zbytocnosti
naviazane na "kniznice". Ale kazdemu sudruhovi podla jeho potrieb.

Dalej to #includuje standardne CMSIS Cortex-M0 hlavickove subory,
https://github.com/STMicroelectronics/STM32CubeF0/tree/master/Drivers/CMSIS/Include
- z nejakych dovodov tam nahadzali vsetko mozne, aj nesuvisiace s CM0,
mozes si to pretriedit.

wek


----- Original Message ---------------

Subject: RE: Zase STM32
   From: Pavel Hudecek <edizon at seznam.cz>
   Date: Sun, 29 Nov 2020 19:43:18 +0100
     To: HW-news <hw-list at list.hw.cz>

Mohl bych poprosit o zaslání .h ve kteém jsou ty registry STM32F030K6T6
zadefinovaný?

Stáhnul jsem nìkolik takových fajlù a nefunguje ani jedno ani druhý
TIM3_CCR0 = val;
TIM3->CCR0 = val;
Zajímavý je, že je v nich nadefinovaných spousta vìcí, jako TIM1_..., nebo
TIM17_... takže tøeba s TIM1 by mi to tak šlo, ale k TIM3 je tam jen BASE.

Díky,
PH


Od: Fanda Kopriva
s STM32F030K6T6 jsem delal pro kamarada nastavovani modelarskeho  serva
opakovacka 20 ms a pulz 1-2ms

void motor(char co)
{
unsigned int pwmx;
 switch (co) {
   case 'I':
            RCC_APB1ENR |=2;                   //servo inicializace
            GPIOB_MODER   |= 0x00000008;       //port pb1
            GPIOB_AFRL    |= 0x00000010;
          TIM3_CR1 = 0x1;     
          TIM3_CCMR2_Output = 0x7000;      
          TIM3_CCR4 = 0;      //togle
          TIM3_CCER = 0x3000;                 //11
          TIM3_CNT = 0;
          TIM3_PSC = 7;          //1us
          TIM3_ARR = 20000;      //20ms
          TIM3_CR1 = 0x1;     //43
          TIM3_CCR4 = 1000;      //1.5ms
           break;
   case 'P':
          pwmx = servo * 50 + 1000;     //servo nastaveni
          if (pwmx>2000) pwmx=2000; 
          TIM3_CCR4 = pwmx;
           break;
   case 'S':TIM3_CCR4 = 1000;      //1.5ms    servo stop
            break;
               }
}

jeste priklad pro stm32f446 - 


#define enc1 0     //pc7 T3ch2
#define enc2 0     //pc8 T3ch3

void encod(unsigned char co){
   if (co=='I') {                                                        
//inicializace
          GPIOC_MODER &=  0xfffc3fff;
          GPIOC_MODER |=  0x00028000;
          GPIOC_AFRH  |=  0x00000002;
          GPIOC_AFRL  |=  0x20000000;
          GPIOC_OSPEEDR |=0x00028000;
          RCC_APB1ENR  |= 0x2;         //tim3      168/4  42MHz
          TIM3_CR1 = 0x81;     
          TIM3_CCMR1_Output = 0x7000;  
          TIM3_CCMR2_Output = 0x0070;  
          TIM3_CCER = 0x0110;                 
          TIM3_CNT = 0;
          TIM3_PSC = 0;
          TIM3_ARR = 20000;
          TIM3_CCR2 = 10000;
          TIM3_CCR3 = 10000;
          TIM3_CR1 = 0x81;     //zisk ad603 pwm1 ch1
               }

  if (co=='P') {                                                     
//nastaveni

          if (laserA>18000) pwmx=18000; else pwmx=18000 - laserA;
          TIM1_CCR2 = pwmx;
          if (laserB>18000) pwmx=18000; else pwmx=18000 - laserB;
          TIM1_CCR3 = pwmx;
               }
                              }


mam tady jeste priklad pro stm32f427 - 

//#define laspwm   0x200           //d14  T4ch3
//#define pwina         // d12  T4ch1   //zisk
//#define pwin          // d13  T4ch2
unsigned int laseron ;
void laser(unsigned char co)
{
signed int laspoz;
switch (co) {
    case 'I':
           GPIOD_MODER &=  0xc0FFFFFF;
           GPIOD_MODER |=  0x2a000000;
           GPIOD_AFRH  |=  0x02220000;
          RCC_APB1ENR  |= 0x4;
          TIM4_CR1 = 0x1;
          TIM4_CCMR2_Output = 0x70;
          TIM4_CCMR1_Output = 0x7070;
          TIM4_CCER = 0x0111;                 //11
          TIM4_CNT = 0;
          TIM4_PSC = 10;
          TIM4_ARR = 256;
          TIM4_CCR3 = 255;
          TIM4_CR1 = 0x1;     //zisk ad603 pwm1 ch1        unsigned int
lasset,lasproud,maxlaser;
             break;
    case 'P':
          TIM4_CCR3 = laserproud;
          TIM4_CCR2 = zisk;
          TIM4_CCR1 = ziska;
             break;
             }
}

fanda

Dne 29. 11. 2020 v 11:15 Pavel Hudecek napsal(a):
Dobrý den všem,
 
Trápím se tady s STM32F030K6T6, k PC pøipojeno pøes STM32F0308 discovery,
Cube IDE.
 
1. Jak udìlat, aby program bìžel i po disconnect?
2. Nedaøí se mi zprovoznit PWM. Byla by nìjaká ukázka, nejlépe pro TIM3?





Další informace o konferenci Hw-list