<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Jestli myslite zapis ve tvaru:<br>
    TIM3->CCR0 = val;<br>
    <br>
    tak k tomu jsou v CMSIS knihovnach soubory pro jednotlive typy
    procesoru. Takze bych si tipnul, ze to bude neco jako:<br>
    #include "stm32f030xx.h"<br>
    Mam tu nejakou hodne starou verzi a je tam soubor "stm32f0xx.h"...<br>
    <br>
    Presny nazev je potreba najit v aktualnich verzich knihoven...<br>
    <br>
    Hynek Sladky<br>
    <br>
    <br>
    <br>
    <div class="moz-cite-prefix">Dne 29.11.2020 v 18:23 Pavel Hudecek
      napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:9b.DzUDX.1XfjIKjSMIw.1VmzaH@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <meta name="Generator" content="Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"Form\00E1tovan\00FD v HTML Char";
        margin:0cm;
        font-size:10.0pt;
        font-family:"Courier New";}
span.FormtovanvHTMLChar
        {mso-style-name:"Form\00E1tovan\00FD v HTML Char";
        mso-style-priority:99;
        mso-style-link:"Form\00E1tovan\00FD v HTML";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
      <div class="WordSection1">
        <p class="MsoNormal">Díky všem,</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">K PWM jsem si vytvořil hezký driver (viz
          dále). Ale nakonec jsem narazil na nečekaný problém: Po
          překladu jsou všechny řádky červené, počínaje tím, že nezná <span
            style="font-family:Consolas">TIM3_CCR0.</span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">A v default kódu vygenerovaném grafickým
          konfigurátorem jsou věci jako:</p>
        <p class="MsoNormal">htim3.Init.CounterMode =
          TIM_COUNTERMODE_UP;</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">Mě by se teda líbilo, kdyby tam byly ty
          věci co jsem použil, s podtržítky, které souhlasí s názvy
          z datasheetu. Předpokládám, že bych měl něco includnout. Tak
          prosím ještě o název fajlu:-)</p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">// moje
            PWM               TIM3 chan<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">#define
            PWM0_chan  3 // az po propojeni<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">#define
            PWM1_chan  4<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">#define
            PWM2_chan  2<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">void
            pwmSet(char chan, uint16_t val) { // hodnota PWM
            -------------------------------------------------<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">      
            switch(chan) {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 0: TIM3_CCR0 = val; break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 1: TIM3_CCR1 = val; break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 2: TIM3_CCR2 = val; break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 3: TIM3_CCR3 = val; break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 4: TIM3_CCR4 = val; break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">       }<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">}<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">void
            pwmInit(uint8_t chan, char port, uint8_t pin, uint16_t per,
            uint16_t val) { // -------------------<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">       int n;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">   
            RCC_APB1ENR |=2;                                //TIM3 en<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    switch
            (port) {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 'A':<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            GPIOA_MODER |= 2<<(1<<pin);            //port
            alt fn<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            switch(chan) {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 0:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 1:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOA_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 2:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOA_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 3:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 4:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            }<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            case 'B':<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            GPIOB_MODER |= 2<<(1<<pin);            //port
            alt fn<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            switch(chan) {<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 0:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 1:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOB_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 2:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOB_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 3:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOB_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            case 4:<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                                 
            GPIOB_AFRL |= 1<<(pin<<2); // AF1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                          
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">                   
            }<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">            
            break;<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    }<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_CR1 =
            0x1;                    // Bit 1 UDIS: Update disable<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">   
            TIM3_CCMR2_Output = 0b110<<12;     // OC4M out 111 PWM
            mode 2, 110 PWM mode 1<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_CCR4
            = val;                          // PWM value<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_CCER
            = 0x3000;             // CC4P 1: OC1 active low / CC4E 1: On
            - OC1 signal is output<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_CNT =
            0;                             // counter<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_PSC =
            0;                             // nedelit - 48 MHz<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_ARR =
            per;                    // perioda<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">    TIM3_CR1 =
            0x1;                    // CEN 1: Counter enabled<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">   
            pwmSet(chan, val);                        // hodnota PWM<o:p></o:p></span></p>
        <p class="MsoNormal"><span
            style="font-size:10.0pt;font-family:Consolas">}<o:p></o:p></span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal">A tady použití:<o:p></o:p></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <p class="MsoNormal"><span style="font-family:Consolas"> 
            pwmInit(PWM0_chan, 'B', 0, CPU_freq/PWM_freq, pwm0);<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas"> 
            pwmInit(PWM1_chan, 'B', 1, CPU_freq/PWM_freq, pwm1);<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas"> 
            pwmInit(PWM2_chan, 'A', 7, CPU_freq/PWM_freq, pwm2);<o:p></o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas"><o:p> </o:p></span></p>
        <p class="MsoNormal"><span style="font-family:Consolas">PH<o:p></o:p></span></p>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div
          style="mso-element:para-border-div;border:none;border-top:solid
          #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
          <p class="MsoNormal" style="border:none;padding:0cm"><b>Od: </b><a
              href="mailto:info@elektronikavyvoj.cz"
              moz-do-not-send="true">Fanda Kopriva</a><br>
            <b>Odesláno:</b>neděle 29. listopadu 2020 13:22<br>
            <b>Komu: </b><a href="mailto:hw-list@list.hw.cz"
              moz-do-not-send="true">hw-list@list.hw.cz</a><br>
            <b>Předmět: </b>Re: Zase STM32</p>
        </div>
        <p class="MsoNormal"><o:p> </o:p></p>
        <div>
          <p class="MsoNormal">dobry den<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal">s STM32F030K6T6 jsem delal pro kamarada
            nastavovani modelarskeho  serva opakovacka 20 ms a pulz
            1-2ms<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal" style="margin-bottom:12.0pt">void
            motor(char co)<br>
            {<br>
            unsigned int pwmx;<br>
             switch (co) {<br>
               case 'I':<br>
                        RCC_APB1ENR |=2;                   //servo
            inicializace<br>
                        GPIOB_MODER   |= 0x00000008;       //port pb1<br>
                        GPIOB_AFRL    |= 0x00000010;<br>
                      TIM3_CR1 = 0x1;     <br>
                      TIM3_CCMR2_Output = 0x7000;      <br>
                      TIM3_CCR4 = 0;      //togle<br>
                      TIM3_CCER = 0x3000;                 //11<br>
                      TIM3_CNT = 0;<br>
                      TIM3_PSC = 7;          //1us<br>
                      TIM3_ARR = 20000;      //20ms<br>
                      TIM3_CR1 = 0x1;     //43<br>
                      TIM3_CCR4 = 1000;      //1.5ms<br>
                       break;<br>
               case 'P':<br>
                      pwmx = servo * 50 + 1000;     //servo nastaveni<br>
                      if (pwmx>2000) pwmx=2000; <br>
                      TIM3_CCR4 = pwmx;<br>
                       break;<br>
               case 'S':TIM3_CCR4 = 1000;      //1.5ms    servo stop<br>
                        break;<br>
                           }<br>
            }<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <p class="MsoNormal">jeste priklad pro stm32f446 - <o:p></o:p></p>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal">#define enc1 0     //pc7 T3ch2<br>
            #define enc2 0     //pc8 T3ch3<br>
            <br>
            void encod(unsigned char co){<br>
               if (co=='I')
            {                                                        
            //inicializace<br>
                      GPIOC_MODER &=  0xfffc3fff;<br>
                      GPIOC_MODER |=  0x00028000;<br>
                      GPIOC_AFRH  |=  0x00000002;<br>
                      GPIOC_AFRL  |=  0x20000000;<br>
                      GPIOC_OSPEEDR |=0x00028000;<br>
                      RCC_APB1ENR  |= 0x2;         //tim3      168/4 
            42MHz<br>
                      TIM3_CR1 = 0x81;     <br>
                      TIM3_CCMR1_Output = 0x7000;  <br>
                      TIM3_CCMR2_Output = 0x0070;  <br>
                      TIM3_CCER = 0x0110;                 <br>
                      TIM3_CNT = 0;<br>
                      TIM3_PSC = 0;<br>
                      TIM3_ARR = 20000;<br>
                      TIM3_CCR2 = 10000;<br>
                      TIM3_CCR3 = 10000;<br>
                      TIM3_CR1 = 0x81;     //zisk ad603 pwm1 ch1<br>
                           }<br>
            <br>
              if (co=='P')
            {                                                     
            //nastaveni<br>
            <br>
                      if (laserA>18000) pwmx=18000; else pwmx=18000 -
            laserA;<br>
                      TIM1_CCR2 = pwmx;<br>
                      if (laserB>18000) pwmx=18000; else pwmx=18000 -
            laserB;<br>
                      TIM1_CCR3 = pwmx;<br>
                           }<br>
                                          }<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal">mam tady jeste priklad pro stm32f427 - <o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal" style="margin-bottom:12.0pt">//#define
            laspwm   0x200           //d14  T4ch3<br>
            //#define pwina         // d12  T4ch1   //zisk<br>
            //#define pwin          // d13  T4ch2<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal">unsigned int laseron ;<br>
            void laser(unsigned char co)<br>
            {<br>
            signed int laspoz;<br>
            switch (co) {<br>
                case 'I':<br>
                       GPIOD_MODER &=  0xc0FFFFFF;<br>
                       GPIOD_MODER |=  0x2a000000;<br>
                       GPIOD_AFRH  |=  0x02220000;<br>
                      RCC_APB1ENR  |= 0x4;<br>
                      TIM4_CR1 = 0x1;<br>
                      TIM4_CCMR2_Output = 0x70;<br>
                      TIM4_CCMR1_Output = 0x7070;<br>
                      TIM4_CCER = 0x0111;                 //11<br>
                      TIM4_CNT = 0;<br>
                      TIM4_PSC = 10;<br>
                      TIM4_ARR = 256;<br>
                      TIM4_CCR3 = 255;<br>
                      TIM4_CR1 = 0x1;     //zisk ad603 pwm1 ch1       
            unsigned int lasset,lasproud,maxlaser;<br>
                         break;<br>
                case 'P':<br>
                      TIM4_CCR3 = laserproud;<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal">          TIM4_CCR2 = zisk;<br>
                      TIM4_CCR1 = ziska;<br>
                         break;<br>
                         }<br>
            }<br>
            <br>
            fanda<o:p></o:p></p>
        </div>
        <div>
          <p class="MsoNormal"><o:p> </o:p></p>
        </div>
        <div>
          <p class="MsoNormal">Dne 29. 11. 2020 v 11:15 Pavel Hudecek
            napsal(a):<o:p></o:p></p>
        </div>
        <blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
          <p class="MsoNormal">Dobrý den všem,<o:p></o:p></p>
          <p class="MsoNormal"> <o:p></o:p></p>
          <p class="MsoNormal">Trápím se tady s STM32F030K6T6, k PC
            připojeno přes STM32F0308 discovery, Cube IDE.<o:p></o:p></p>
          <p class="MsoNormal"> <o:p></o:p></p>
          <p class="MsoNormal">1. Jak udělat, aby program běžel i po
            disconnect?<o:p></o:p></p>
          <p class="MsoNormal">2. Nedaří se mi zprovoznit PWM. Byla by
            nějaká ukázka, nejlépe pro TIM3?<o:p></o:p></p>
          <p class="MsoNormal"> <o:p></o:p></p>
          <p class="MsoNormal">Díky,<o:p></o:p></p>
          <p class="MsoNormal">PH<o:p></o:p></p>
          <br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>