Jelajahi Sumber

Added funtion fpr PWM on pin

Garth Seale 3 tahun lalu
induk
melakukan
8f743edae2
3 mengubah file dengan 87 tambahan dan 50 penghapusan
  1. 2 2
      .settings/language.settings.xml
  2. 82 45
      APP/maincpp.cpp
  3. 3 3
      Core/Src/Backup/tim.c.bak

+ 2 - 2
.settings/language.settings.xml

@@ -5,7 +5,7 @@
 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1379717597097084461" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="816097363181162825" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>
@@ -17,7 +17,7 @@
 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
 			<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
-			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1379717597097084461" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
+			<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="816097363181162825" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
 				<language-scope id="org.eclipse.cdt.core.gcc"/>
 				<language-scope id="org.eclipse.cdt.core.g++"/>
 			</provider>

+ 82 - 45
APP/maincpp.cpp

@@ -28,7 +28,7 @@ enum {
 	CHECKSUM
 };
 
-struct freqout {
+struct PWMOUT {
 	uint8_t portStat;
 	uint16_t freq;
 	uint16_t duty;
@@ -36,92 +36,129 @@ struct freqout {
 	uint32_t timchan;
 	void Init(TIM_HandleTypeDef *port, uint32_t tchan);
 	void output(uint16_t freq);
+	uint32_t setupoutput(uint32_t freq);
 
 };
 
 uint8_t chsum(uint8_t * data);
 uint8_t txdata(uint8_t * data);
 
-freqout port1freq;
-freqout port2freq;
+PWMOUT port1freq;
+PWMOUT port2freq;
+
+uint16_t numberofdigits = 0;
+uint8_t count = 0;
 
 //#include "STM_ENC28_J60.h"
 volatile uint16_t pwm1freq = 0;
 volatile uint16_t pwm1freqnew = 100;
 volatile uint16_t pwm2freq = 0;
-volatile uint16_t pwm2freqnew = 10000;
+volatile uint16_t pwm2freqnew = 9999;
 volatile uint16_t val;
 volatile uint32_t pwm1counter;
 volatile uint32_t pwm1period;
 void maincpp()
 {
-
+	numberofdigits = pwm2freqnew;
+	while(numberofdigits != 0) {
+		numberofdigits=numberofdigits/10;
+		count++;
+	}
 	port1freq.Init(&htim1, TIM_CHANNEL_1);
 	port2freq.Init(&htim3, TIM_CHANNEL_4);
-//	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
-//	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
+	//	HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
+	//	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);
 
-	port1freq.freq = (360000/20)-1;
-	port1freq.duty = port1freq.freq/2;
-	htim1.Instance->CCR1 = port1freq.duty;
-	htim1.Instance->ARR = port1freq.freq;
-	port2freq.freq = (360000/10)-1;
-	port2freq.duty = port2freq.freq/2;
-	htim3.Instance->CCR1 = port2freq.duty;
-	htim3.Instance->ARR = port2freq.freq;
+	port1freq.setupoutput(10);
+	port2freq.setupoutput(10);
 
-//	HAL_TIM_Base_Start_IT(&htim17);
+//	port1freq.freq = (360000/10)-1;
+//	port1freq.duty = port1freq.freq/2;
+//	htim1.Instance->CCR1 = port1freq.duty;
+//	htim1.Instance->ARR = port1freq.freq;
+//	port2freq.freq = (360000/2000)-1;
+//	port2freq.duty = port2freq.freq/2;
+//	//	htim3.Instance->CCR1
+//	htim3.Instance->CCR4 = port2freq.duty;
+//	htim3.Instance->ARR = port2freq.freq;
+
+	//	HAL_TIM_Base_Start_IT(&htim17);
 
 	while(1)
 	{
 
 		txdata(txbuff);
 		HAL_Delay(1000);
-//		if(pwm1freq != pwm1freqnew)
-//		{
-//			pwm1freq = pwm1freqnew;
-////			val =  (map(pwm1freq, 1, 10000, 10000, 1))-1;
-//			htim1.Instance->CCR1 = (pwm1freq/2);
-//			htim1.Instance->ARR = pwm1freq;
-//
-//		}
-//		if(pwm2freq != pwm2freqnew)
-//		{
-//			val = (360000/pwm2freqnew)-1;
-//			pwm1freqnew = val;
-//			pwm2freq = pwm2freqnew;
-//
-//
-//		}
+		//		if(pwm1freq != pwm1freqnew)
+		//		{
+		//			pwm1freq = pwm1freqnew;
+		////			val =  (map(pwm1freq, 1, 10000, 10000, 1))-1;
+		//			htim1.Instance->CCR1 = (pwm1freq/2);
+		//			htim1.Instance->ARR = pwm1freq;
+		//
+		//		}
+		//		if(pwm2freq != pwm2freqnew)
+		//		{
+		//			val = (360000/pwm2freqnew)-1;
+		//			pwm1freqnew = val;
+		//			pwm2freq = pwm2freqnew;
+		//
+		//
+		//		}
 	}
 }
 
 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 {
-  /* Prevent unused argument(s) compilation warning */
-  if(htim->Instance == TIM17)
-  {
-	  pwm1counter++;
-	  if(pwm1counter >= pwm1period)
-	  {
-//		  HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
-		  pwm1counter = 0;
-	  }
+	/* Prevent unused argument(s) compilation warning */
+	if(htim->Instance == TIM17)
+	{
+		pwm1counter++;
+		if(pwm1counter >= pwm1period)
+		{
+			//		  HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
+			pwm1counter = 0;
+		}
 
-  }
+	}
 
 
-  /* NOTE : This function should not be modified, when the callback is needed,
+	/* NOTE : This function should not be modified, when the callback is needed,
             the HAL_TIM_PeriodElapsedCallback could be implemented in the user file
-   */
+	 */
 }
 
-void freqout::Init(TIM_HandleTypeDef *port, uint32_t tchan) {
+void PWMOUT::Init(TIM_HandleTypeDef *port, uint32_t tchan) {
 	timport = *port;
 	timchan = tchan;
 	HAL_TIM_PWM_Start(&timport, timchan);
 }
 
+uint32_t PWMOUT::setupoutput(uint32_t pwmfreq) {
+
+	uint32_t scale = 360000;
+	uint32_t autoreloadr = scale/pwmfreq;
+
+	switch (timchan)
+	{
+	case TIM_CHANNEL_1:
+		timport.Instance->CCR1 = autoreloadr/2;
+		break;
+	case TIM_CHANNEL_2:
+		timport.Instance->CCR2 = autoreloadr/2;
+		break;
+	case TIM_CHANNEL_3:
+		timport.Instance->CCR3 = autoreloadr/2;
+		break;
+	case TIM_CHANNEL_4:
+		timport.Instance->CCR4 = autoreloadr/2;
+		break;
+	}
+	timport.Instance->ARR = autoreloadr;
+	freq = pwmfreq;
+	return freq;
+}
+
 uint8_t txdata(uint8_t * data) {
 	txbuff[DATASIZE]	= STREAMLENTH;
 	txbuff[PORT1STAT]	= port1freq.portStat;

+ 3 - 3
Core/Src/Backup/tim.c.bak

@@ -49,7 +49,7 @@ void MX_TIM1_Init(void)
   htim1.Init.Period = 3600;
   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
   htim1.Init.RepetitionCounter = 0;
-  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
+  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
   {
     Error_Handler();
@@ -70,7 +70,7 @@ void MX_TIM1_Init(void)
     Error_Handler();
   }
   sConfigOC.OCMode = TIM_OCMODE_PWM1;
-  sConfigOC.Pulse = 0;
+  sConfigOC.Pulse = 1800;
   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
   sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
@@ -138,7 +138,7 @@ void MX_TIM3_Init(void)
     Error_Handler();
   }
   sConfigOC.OCMode = TIM_OCMODE_PWM1;
-  sConfigOC.Pulse = 0;
+  sConfigOC.Pulse = 1800;
   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
   sConfigOC.OCFastMode = TIM_OCFAST_ENABLE;
   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)