diff --git a/Makefile b/Makefile index e048bda..d6f2f40 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ TARGET = stm32f030c8t_test # building variables ###################################### # debug build? -DEBUG = 0 +DEBUG = 1 # optimization OPT = -O3 diff --git a/Src/main.c b/Src/main.c index 7cbbc90..f392db2 100644 --- a/Src/main.c +++ b/Src/main.c @@ -59,11 +59,13 @@ void SystemClock_Config(void); /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -bool dirty = false; -uint16_t mem[12] = {0}; +bool dirty = true; +//uint16_t mem[12] = {0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF, 0xFFF, 0xFF}; +uint16_t mem[12] = {0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40, 0x300, 0x40}; #define BUFFER_SIZE 64 uint16_t RX_Buffer[BUFFER_SIZE] = {0}; +uint16_t TX_Buffer[BUFFER_SIZE] = {0}; void HAL_SPI_CpltCallback(SPI_HandleTypeDef *hspi) { @@ -102,43 +104,18 @@ void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi) { //HAL_SPI_Transmit_DMA(&hspi2, (uint8_t *) TX_Buffer, 4); } -void initPWM(TIM_HandleTypeDef timer, uint32_t channel, uint16_t period, - uint16_t pulse) { - //HAL_TIM_PWM_Stop(&timer, channel); -// stop generation of pwm - TIM_OC_InitTypeDef sConfigOC; - timer.Init.Period = period; -// set the period duration - HAL_TIM_PWM_Init(&timer); // reinititialise with new period value - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = pulse; -// set the pulse duration - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - HAL_TIM_PWM_ConfigChannel(&timer, &sConfigOC, channel); - HAL_TIM_PWM_Start(&timer, channel); -} - -void setPWM(TIM_HandleTypeDef timer, uint32_t channel, uint16_t period, - uint16_t pulse) { - //HAL_TIM_PWM_Stop(&timer, channel); -// stop generation of pwm - TIM_OC_InitTypeDef sConfigOC; - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = pulse; -// set the pulse duration - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - HAL_TIM_PWM_ConfigChannel(&timer, &sConfigOC, channel); - //HAL_TIM_PWM_Start(&timer, channel); -} - void setDAC(uint8_t channel, uint16_t val) { uint16_t frame = (val & 0x0FFF) | (0x7000 & (channel << 12)); - HAL_SPI_Transmit(&hspi1, (uint8_t *) &frame, 1, 100); + HAL_SPI_Transmit(&hspi1, (uint8_t * ) & frame, 1, 100); } + /* USER CODE END 0 */ + +static uint8_t pwm_lookup[] = {0, 1, 2, 3, 10, 11, 12, 20, 21, 32, 32, 42, 42, 52, 52, 61, 61, 70, 70, 79, 79, 88, 88, + 98, 98, 107, 107, 117, 117, 127, 127, 137, 137, 147, 147, 157, 157, 167, 167, 177, 177, + 187, 187, 197, 197, 207, 207, 217, 217, 227, 227, 237, 237, 247, 247, 255, 255}; + /** * @brief The application entry point. * @retval int @@ -175,21 +152,43 @@ int main(void) { MX_SPI2_Init(); + TIM1->ARR = 254; + TIM1->CCR1 = 10; + TIM1->CCR2 = 10; + TIM1->CCR3 = 10; + TIM1->CCR4 = 10; + TIM1->CCMR1 = 0x6868; + TIM1->CCMR2 = 0x6868; + TIM1->CCER = 0x1111; + TIM1->EGR |= TIM_EGR_UG; + TIM1->BDTR |= TIM_BDTR_MOE; + TIM1->CR1 |= TIM_CR1_CEN; + + TIM3->ARR = 254; + TIM3->CCR1 = 10; + TIM3->CCR2 = 10; + + TIM3->CCMR1 = 0x6868; + TIM3->CCER = 0x1111; + TIM3->EGR |= TIM_EGR_UG; + TIM3->BDTR |= TIM_BDTR_MOE; + TIM3->CR1 |= TIM_CR1_CEN; + HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_RESET); uint16_t frame = 0b1001000000000000; - HAL_SPI_Transmit(&hspi1, (uint8_t *) &frame, 1, 100); + HAL_SPI_Transmit(&hspi1, (uint8_t * ) & frame, 1, 100); for (int i = 0; i < 6; ++i) { setDAC(i, mem[i * 2]); } - initPWM(htim1, TIM_CHANNEL_1, 255, 0xFF & mem[1]); - initPWM(htim1, TIM_CHANNEL_2, 255, 0xFF & mem[3]); - initPWM(htim1, TIM_CHANNEL_3, 255, 0xFF & mem[5]); - initPWM(htim1, TIM_CHANNEL_4, 255, 0xFF & mem[7]); - initPWM(htim3, TIM_CHANNEL_1, 255, 0xFF & mem[9]); - initPWM(htim3, TIM_CHANNEL_2, 255, 0xFF & mem[11]); + TIM1->CCR1 = 0xFF & mem[1]; + TIM1->CCR2 = 0xFF & mem[3]; + TIM1->CCR3 = 0xFF & mem[5]; + TIM1->CCR4 = 0xFF & mem[7]; + TIM3->CCR1 = 0xFF & mem[9]; + TIM3->CCR2 = 0xFF & mem[11]; HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_SET); @@ -204,24 +203,69 @@ int main(void) { /* USER CODE BEGIN 3 */ +#if 1 if(dirty) { HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_RESET); for (int i = 0; i < 6; ++i) { setDAC(i, mem[i * 2]); } - initPWM(htim1, TIM_CHANNEL_1, 255, 0xFF & mem[1]); - initPWM(htim1, TIM_CHANNEL_2, 255, 0xFF & mem[3]); - initPWM(htim1, TIM_CHANNEL_3, 255, 0xFF & mem[5]); - initPWM(htim1, TIM_CHANNEL_4, 255, 0xFF & mem[7]); - initPWM(htim3, TIM_CHANNEL_1, 255, 0xFF & mem[9]); - initPWM(htim3, TIM_CHANNEL_2, 255, 0xFF & mem[11]); + TIM1->CCR1 = 0xFF & mem[1]; + TIM1->CCR2 = 0xFF & mem[3]; + TIM1->CCR3 = 0xFF & mem[5]; + TIM1->CCR4 = 0xFF & mem[7]; + TIM3->CCR1 = 0xFF & mem[9]; + TIM3->CCR2 = 0xFF & mem[11]; dirty = false; - HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_SET); - } - HAL_Delay(50); + } + +#else + + setDAC(0, 50 << 4); + setDAC(1, 50 << 4); + setDAC(2, 50 << 4); + setDAC(3, 50 << 4); + setDAC(4, 50 << 4); + setDAC(5, 50 << 4); + + HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_SET); + + for (int i = 0; i < sizeof(pwm_lookup); i++) { + uint8_t j = pwm_lookup[i]; + + TIM1->CCR1 = j; + TIM1->CCR2 = j; + TIM1->CCR3 = j; + TIM1->CCR4 = j; + TIM3->CCR1 = j; + TIM3->CCR2 = j; + + HAL_Delay(5); + } + + TIM1->CCR1 = 256; + TIM1->CCR2 = 256; + TIM1->CCR3 = 256; + TIM1->CCR4 = 256; + TIM3->CCR1 = 256; + TIM3->CCR2 = 256; + for (int i = 50; i < 256; i++) { + setDAC(0, i << 4); + setDAC(1, i << 4); + setDAC(2, i << 4); + setDAC(3, i << 4); + setDAC(4, i << 4); + setDAC(5, i << 4); + HAL_Delay(5); + } + + HAL_GPIO_WritePin(SIGNAL_LED_GPIO_Port, SIGNAL_LED_Pin, GPIO_PIN_RESET); + + HAL_Delay(200); + +#endif } /* USER CODE END 3 */