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.
Diff: Nucleo_Encoder_16_bits.cpp
- Revision:
- 2:3fcf36c1b1af
- Parent:
- 1:e82009479b5c
- Child:
- 3:d43c60d01569
--- a/Nucleo_Encoder_16_bits.cpp Thu May 26 16:21:43 2016 +0000
+++ b/Nucleo_Encoder_16_bits.cpp Mon Dec 17 17:02:43 2018 +0000
@@ -1,12 +1,25 @@
#include "Nucleo_Encoder_16_bits.h"
-int32_t Soft_32_Counter_TIM2, Soft_32_Counter_TIM3, Soft_32_Counter_TIM4, Soft_32_Counter_TIM5;
+int32_t Soft_32_Counter_TIM1,Soft_32_Counter_TIM2, Soft_32_Counter_TIM3, Soft_32_Counter_TIM4, Soft_32_Counter_TIM5;
+
+void Overflow_Routine_TIM1()
+{
+ if(TIM1->SR & 0x0001)
+ {
+ //////printf("Overflow Routine");
+ TIM1->SR &= 0xfffe;
+ if(!(TIM1->CR1&TIM_CR1_DIR))
+ Soft_32_Counter_TIM1 += 0xffff;
+ else
+ Soft_32_Counter_TIM1 -= 0xffff;
+ }
+}
void Overflow_Routine_TIM2()
{
if(TIM2->SR & 0x0001)
{
- printf("Overflow Routine");
+ //////printf("Overflow Routine");
TIM2->SR &= 0xfffe;
if(!(TIM2->CR1&TIM_CR1_DIR))
Soft_32_Counter_TIM2 += 0xffff;
@@ -19,7 +32,7 @@
{
if(TIM3->SR & 0x0001)
{
- printf("Overflow Routine");
+ //////printf("Overflow Routine");
TIM3->SR &= 0xfffe;
if(!(TIM3->CR1&TIM_CR1_DIR))
Soft_32_Counter_TIM3 += 0xffff;
@@ -31,7 +44,7 @@
{
if(TIM4->SR & 0x0001)
{
- printf("Overflow Routine");
+ //////////printf("Overflow Routine");
TIM4->SR &= 0xfffe;
if(!(TIM4->CR1&TIM_CR1_DIR))
Soft_32_Counter_TIM4 += 0xffff;
@@ -43,7 +56,7 @@
{
if(TIM5->SR & 0x0001)
{
- printf("Overflow Routine");
+ ////printf("Overflow Routine");
TIM5->SR &= 0xfffe;
if(!(TIM5->CR1&TIM_CR1_DIR))
Soft_32_Counter_TIM5 += 0xffff;
@@ -113,6 +126,7 @@
// Setting the ISR for the corresponding interrupt vector
switch((uint32_t)TIM)
{
+
case TIM2_BASE :
NVIC_SetVector(TIM2_IRQn, (uint32_t)&Overflow_Routine_TIM2);
NVIC_EnableIRQ(TIM2_IRQn);
@@ -160,6 +174,7 @@
// Setting the ISR for the corresponding interrupt vector
switch((uint32_t)TIM)
{
+
case TIM2_BASE :
NVIC_SetVector(TIM2_IRQn, (uint32_t)&Overflow_Routine_TIM2);
NVIC_EnableIRQ(TIM2_IRQn);
@@ -192,30 +207,64 @@
}
- int32_t Nucleo_Encoder_16_bits::GetCounter()
+ int32_t Nucleo_Encoder_16_bits::GetCounter(bool reset)
{
uint16_t count = TIM->CNT;
- switch((uint32_t)TIM)
- {
- case TIM2_BASE :
- return (int32_t)count + Soft_32_Counter_TIM2;
- break;
-
- case TIM3_BASE :
- return (int32_t)count + Soft_32_Counter_TIM3;
- break;
-
- case TIM4_BASE :
- return (int32_t)count + Soft_32_Counter_TIM4;
- break;
-
- case TIM5_BASE :
- return (int32_t)count + Soft_32_Counter_TIM5;
- break;
+ if(reset){
+ switch((uint32_t)TIM){
+ case TIM1_BASE :
+ TIM1->CNT = 0;
+ Soft_32_Counter_TIM1 = 0;
+ break;
+
+ case TIM2_BASE :
+ TIM2->CNT = 0;
+ Soft_32_Counter_TIM2 = 0;
+ break;
+
+ case TIM3_BASE :
+ TIM3->CNT = 0;
+ Soft_32_Counter_TIM3 = 0;
+ break;
+
+ case TIM4_BASE :
+ TIM4->CNT = 0;
+ Soft_32_Counter_TIM4 = 0;
+ break;
+
+ case TIM5_BASE :
+ TIM5->CNT = 0;
+ Soft_32_Counter_TIM5 = 0;
+ break;
+ }
+ }
+ else{
+ switch((uint32_t)TIM)
+ {
+ case TIM1_BASE :
+ return (int32_t)count + Soft_32_Counter_TIM1;
+ break;
+
+ case TIM2_BASE :
+ return (int32_t)count + Soft_32_Counter_TIM2;
+ break;
+
+ case TIM3_BASE :
+ return (int32_t)count + Soft_32_Counter_TIM3;
+ break;
+
+ case TIM4_BASE :
+ return (int32_t)count + Soft_32_Counter_TIM4;
+ break;
+
+ case TIM5_BASE :
+ return (int32_t)count + Soft_32_Counter_TIM5;
+ break;
+ }
}
return (int32_t)count;
- }
+ }
TIM_HandleTypeDef* Nucleo_Encoder_16_bits::GetTimer()
{