Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: PM2_Libary PM2_Libary
Diff: Device/FastPWM_STM_TIM.cpp
- Revision:
- 13:cdefd9d75b64
- Child:
- 17:8378bc456f0d
diff -r 4600daab8a83 -r cdefd9d75b64 Device/FastPWM_STM_TIM.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Device/FastPWM_STM_TIM.cpp Sun Jul 20 19:49:43 2014 +0000
@@ -0,0 +1,42 @@
+//This should (hopefully) work on all STM targets which use TIM timers for PWM
+
+#ifdef TARGET_STM
+
+#include "FastPWM.h"
+
+#define PWM_CHANNEL (**(__IO uint32_t**)fast_obj)
+#define PWM_TIMER ((TIM_TypeDef*)_pwm.pwm)
+
+extern __IO uint32_t* getChannel(TIM_TypeDef* pwm, PinName pin);
+
+void FastPWM::initFastPWM( void ) {
+ fast_obj = new (__IO uint32_t*);
+ *(__IO uint32_t**)fast_obj = getChannel(PWM_TIMER, _pwm.pin);
+ bits = 16;
+}
+
+void FastPWM::pulsewidth_ticks( uint32_t ticks ) {
+ PWM_CHANNEL = ticks;
+}
+
+void FastPWM::period_ticks( uint32_t ticks ) {
+ PWM_TIMER->ARR = ticks - 1;
+}
+
+uint32_t FastPWM::getPeriod( void ) {
+ return PWM_TIMER->ARR + 1;
+}
+
+uint32_t FastPWM::setPrescaler(uint32_t reqScale) {
+ if (reqScale == 0)
+ //Return prescaler
+ return PWM_TIMER->PSC + 1;
+ if (reqScale > (uint32_t)(1<<16))
+ reqScale = 1<<16;
+ //Else set prescaler, we have to substract one from reqScale since a 0 in PCVAL is prescaler of 1
+ PWM_TIMER->PSC = reqScale - 1;
+
+ return reqScale;
+}
+
+#endif
\ No newline at end of file