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_... take 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 vem,
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