Ik vind die STM32 HAL libraries echt 3x niks over het algemeen. Bij sommige dingen zal het vast handig zijn dat hij bijvoorbeeld wat prescalers bij een UART goed zet. Maar gewoon bijvoorbeeld een PWM werkend krijgen doe ik liever direct via registers dan uitvogelen hoe je dat in hemelsnaam doet via hun HAL. Tegenwoordig zijn ze die in iedergeval wel gelijk aan het maken, want eerst was het dat een identiek peripheral waar identieke register-level code prima werkte op beide, de HAL functies verschillend waren.
De (voormalig) Freescale MCUs hebben ook zoiets, maar daar waren dan de functies wel identiek bij verschillende MCUs, maar elke nieuwe versie die ze uitbrengen veranderen ze alle functienamen en argumenten weer.
Nu voor de originele vraag, @
jctjepkema , ik zou verwachten dat hij op de seriele poort een foutmelding geeft, maar misschien hebben ze die in nieuwste versie wel uit staan omdat ze wat aan het kloten zijn met de hele error API. Probleem is heel simpel: PA_15 kan geen PWM output genereren.
Hier heb je de lijst direct uit de mbed source code welke PWM aan kunnen:
https://github.com/ARMmbe...42K6/PeripheralPins.c#L80
Degene die uitgecomment zijn, zijn dat of omdat ze dubbel zijn (meerdere Timers die een PWM op een pin kunnen genereren), of omdat die specifieke timer al door de mbed Timer API wordt gebruikt. Maar heel PA_15 komt er niet in voor. Nu dacht ik even het in de reference manual op te zoeken, maar kan dus nergens de opties voor de alternatieve functies voor elke pin vinden voor die MCU vinden. Pré van NXP MCUs, ik ben dol op hun reference manuals vergeleken met die van sommige andere (ik ben biased, maar dat vond ik vroeger ook al). In de datasheet is wel wat te vinden, niet alles, maar voldoende voor nu:
PA15 heeft als alternate functies:
SPI1_NSS, I2S1_WS,
USART2_RX,
TIM2_CH1_ETR,
EVENTOUT,
ETR = external trigger. Oftewel er is geen output voor de PWM op deze pin, en het is juist dat het niet mogelijk is hier een PWM output op te genereren met de hardware timers.
Overigens wat hierboven beschreven is één van de dingen waarom ik ondanks de nadelen toch de mbed online compiler erg leuk vind: Het werkt simpelweg.
erik23 schreef op woensdag 12 april 2017 @ 16:55:
[...]
Ik denk dat, wanneer je de HAL van ST een beetje doorhebt het een prima systeem is. Uiteraard ben je niet zo snel als even een klein testje met Arduino maar je krijgt er wel een hoop performance voor terug.
De mbed API voor STM32s leunt op de ST HAL API. Om een pin van input naar output te veranderen, wat één bitje in een register toggelen is: 500 klokcycles. I kid you not

.
Misschien is het logischer als je het een hoop verbruikt, maar veel van de functies zijn erg simpel (als in, gewoon een bit setten/clearen in een register), ondoorzichtig (onduidelijk wat er nu precies gebeurd), en je hebt alsnog de reference manual nodig. Dus persoonlijk doe ik het dan zelf wel direct. Daarbij moet ik wel zeggen dat alle simpele zaken en setup dingen ik door mbed laat afhandelen.
[
Voor 19% gewijzigd door
Sissors op 12-04-2017 21:03
]