From e0352dde3f0e97f69da7224e81e06caf138df233 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Wed, 3 May 2023 22:45:37 +0300 Subject: [PATCH] fixed PWM --- F3:F303/NitrogenFlooding/adc.c | 2 +- F3:F303/NitrogenFlooding/hardware.c | 13 ++++++++----- F3:F303/NitrogenFlooding/hardware.h | 5 ++++- F3:F303/NitrogenFlooding/nitrogen.bin | Bin 9280 -> 10400 bytes F3:F303/NitrogenFlooding/openocd.cfg | 2 +- F3:F303/NitrogenFlooding/proto.c | 15 +++++++++++---- F3:F303/NitrogenFlooding/usbhw.c | 4 ++-- F3:F303/NitrogenFlooding/version.inc | 4 ++-- 8 files changed, 29 insertions(+), 16 deletions(-) diff --git a/F3:F303/NitrogenFlooding/adc.c b/F3:F303/NitrogenFlooding/adc.c index 9247386..1f84b63 100644 --- a/F3:F303/NitrogenFlooding/adc.c +++ b/F3:F303/NitrogenFlooding/adc.c @@ -114,7 +114,7 @@ uint16_t getADCval(int nch){ int addr = nch, adval = NUMBER_OF_ADC1_CHANNELS; if(nch >= NUMBER_OF_ADC1_CHANNELS){ adval = NUMBER_OF_ADC2_CHANNELS; - addr += ADC2START; + addr += ADC2START - NUMBER_OF_ADC1_CHANNELS; } for(int i = 0; i < 9; ++i, addr += adval) // first we should prepare array for optmed p[i] = ADC_array[addr]; diff --git a/F3:F303/NitrogenFlooding/hardware.c b/F3:F303/NitrogenFlooding/hardware.c index 8bf160c..f644ce2 100644 --- a/F3:F303/NitrogenFlooding/hardware.c +++ b/F3:F303/NitrogenFlooding/hardware.c @@ -73,8 +73,8 @@ TRUE_INLINE void gpio_setup(){ // PORT E //GPIOE->ODR = 0; - GPIOE->AFR[0] = 0; - GPIOE->AFR[1] = AFRf(2, 2) | AFRf(2, 3) | AFRf(2, 4) | AFRf(2, 5); + GPIOE->AFR[0] = AFRf(2, 2) | AFRf(2, 3) | AFRf(2, 4) | AFRf(2, 5); + GPIOE->AFR[1] = 0; GPIOE->MODER = MODER_AF(2) | MODER_AF(3) | MODER_AF(4) | MODER_AF(5) | MODER_O(8) | MODER_O(9) | MODER_O(10) | MODER_O(11); GPIOE->OSPEEDR = 0; GPIOE->OTYPER = 0; @@ -92,12 +92,15 @@ TRUE_INLINE void gpio_setup(){ TRUE_INLINE void pwm_setup(){ TIM3->CR1 = TIM_CR1_ARPE; - TIM3->PSC = 1999; // 48M/2000 = 24kHz + TIM3->PSC = 7199; // 72M/7200 = 10kHz; PWMfreq=10k/100=100Hz // PWM mode 1 (active -> inactive) TIM3->CCMR1 = TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1; TIM3->CCMR2 = TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1; TIM3->CCR1 = 0; - TIM3->ARR = 255; // 8bit PWM + TIM3->CCR2 = 0; + TIM3->CCR3 = 0; + TIM3->CCR4 = 0; + TIM3->ARR = PWM_CCR_MAX-1; // 8bit PWM TIM3->BDTR |= TIM_BDTR_MOE; // enable main output TIM3->CCER = TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E; TIM3->CR1 |= TIM_CR1_CEN; @@ -138,7 +141,7 @@ void hw_setup(){ #endif } -void setPWM(int nch, uint8_t val){ +void setPWM(int nch, uint16_t val){ switch(nch){ case 0: TIM3->CCR1 = val; diff --git a/F3:F303/NitrogenFlooding/hardware.h b/F3:F303/NitrogenFlooding/hardware.h index 53792e9..986a517 100644 --- a/F3:F303/NitrogenFlooding/hardware.h +++ b/F3:F303/NitrogenFlooding/hardware.h @@ -26,6 +26,9 @@ #define PCLK (72000000) #endif +// Max PWM CCR1 value (->1) +#define PWM_CCR_MAX (100) + // USB pullup: PC9 #define USBPU_port GPIOC #define USBPU_pin (1<<9) @@ -77,5 +80,5 @@ extern int LEDsON; uint8_t MSB(uint16_t val); void hw_setup(); -void setPWM(int nch, uint8_t val); +void setPWM(int nch, uint16_t val); uint8_t getPWM(int nch); diff --git a/F3:F303/NitrogenFlooding/nitrogen.bin b/F3:F303/NitrogenFlooding/nitrogen.bin index 05e6931e654cbfbe115985cd0126bf5c31a56bd1..26b440d09a5041cf6ecc9af787a611bf379125fa 100755 GIT binary patch literal 10400 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 I_j>^U4KM*u&Hw-a diff --git a/F3:F303/NitrogenFlooding/openocd.cfg b/F3:F303/NitrogenFlooding/openocd.cfg index 0210594..ad3c59d 100644 --- a/F3:F303/NitrogenFlooding/openocd.cfg +++ b/F3:F303/NitrogenFlooding/openocd.cfg @@ -1,4 +1,4 @@ set FLASH_SIZE 0x20000 -source [find interface/stlink-v2-1.cfg] +source [find interface/stlink.cfg] source [find target/stm32f3x.cfg] diff --git a/F3:F303/NitrogenFlooding/proto.c b/F3:F303/NitrogenFlooding/proto.c index 5f702f5..e9c86e9 100644 --- a/F3:F303/NitrogenFlooding/proto.c +++ b/F3:F303/NitrogenFlooding/proto.c @@ -29,7 +29,11 @@ static uint8_t I2Caddress = 0; // parno - number of parameter (or -1); cargs - string with arguments (after '=') (==NULL for getter), iarg - integer argument -static int goodstub(const char _U_ *cmd, int _U_ parno, const char _U_ *carg, int32_t _U_ iarg){ +static int goodstub(const char *cmd, int parno, const char *carg, int32_t iarg){ + USB_sendstr("cmd="); USB_sendstr(cmd); + USB_sendstr(", parno="); USB_sendstr(i2str(parno)); + USB_sendstr(", args="); USB_sendstr(carg); + USB_sendstr(", intarg="); USB_sendstr(i2str(iarg)); newline(); return RET_GOOD; } @@ -130,8 +134,11 @@ static int tms(const char _U_ *cmd, int _U_ parno, const char _U_ *c, int32_t _U static int pwm(const char *cmd, int parno, const char *c, int32_t i){ if(parno < 0 || parno > 3) return RET_WRONGPARNO; - if(c) setPWM(parno, (uint8_t)i); - sendkeyu(cmd, -1, getPWM(parno)); + if(c){ + if(i < 0 || i > PWM_CCR_MAX) return RET_WRONGARG; + setPWM(parno, (uint16_t)i); + } + sendkeyu(cmd, parno, getPWM(parno)); return RET_GOOD; } @@ -146,7 +153,7 @@ commands cmdlist[] = { {NULL, "Different commands", NULL}, {buzzer, "buzzer", "get/set (0 - off, 1 - on) buzzer"}, {leds, "LED", "LEDx=y; where x=0..3 to work with single LED (then y=1-set, 0-reset, 2-toggle), absent to work with all (y=0 - disable, 1-enable)"}, - {pwm, "pwm", "set/get x channel (0..3) pwm value (0..255)"}, + {pwm, "pwm", "set/get x channel (0..3) pwm value (0..100)"}, {reset, "reset", "reset MCU"}, {tms, "tms", "print Tms"}, {NULL, "I2C commands", NULL}, diff --git a/F3:F303/NitrogenFlooding/usbhw.c b/F3:F303/NitrogenFlooding/usbhw.c index 8d2a880..f98d0ef 100644 --- a/F3:F303/NitrogenFlooding/usbhw.c +++ b/F3:F303/NitrogenFlooding/usbhw.c @@ -50,10 +50,10 @@ static uint16_t lastaddr = LASTADDR_DEFAULT; int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, void (*func)(ep_t ep)){ if(number >= STM32ENDPOINTS) return 4; // out of configured amount if(txsz > USB_BTABLE_SIZE || rxsz > USB_BTABLE_SIZE) return 1; // buffer too large - if(lastaddr + txsz + rxsz >= USB_BTABLE_SIZE) return 2; // out of btable + if(lastaddr + txsz + rxsz >= USB_BTABLE_SIZE/ACCESSZ) return 2; // out of btable USB->EPnR[number] = (type << 9) | (number & USB_EPnR_EA); USB->EPnR[number] ^= USB_EPnR_STAT_RX | USB_EPnR_STAT_TX_1; - if(rxsz & 1 || rxsz > 512) return 3; // wrong rx buffer size + if(rxsz & 1 || rxsz > USB_BTABLE_SIZE) return 3; // wrong rx buffer size uint16_t countrx = 0; if(rxsz < 64) countrx = rxsz / 2; else{ diff --git a/F3:F303/NitrogenFlooding/version.inc b/F3:F303/NitrogenFlooding/version.inc index 379d92d..1d5ece6 100644 --- a/F3:F303/NitrogenFlooding/version.inc +++ b/F3:F303/NitrogenFlooding/version.inc @@ -1,2 +1,2 @@ -#define BUILD_NUMBER "52" -#define BUILD_DATE "2023-04-10" +#define BUILD_NUMBER "56" +#define BUILD_DATE "2023-05-03"