From: Martin Mares Date: Wed, 8 Aug 2018 10:27:09 +0000 (+0200) Subject: SSR: Adjusting to STM32F1 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=075b0e3ec3abb970b92ae6d033c8c41f00adffc0;p=home-hw.git SSR: Adjusting to STM32F1 --- diff --git a/ssr/Src/ds18b20.c b/ssr/Src/ds18b20.c index d44524d..0b9b49b 100644 --- a/ssr/Src/ds18b20.c +++ b/ssr/Src/ds18b20.c @@ -11,7 +11,7 @@ static volatile u32 ds_dma_buffer; #define DS_PIN_MASK (1U << 7) // Unfortunately, this cannot be inferred from the Pin constant #define DS_DMA DMA1 #define DS_DMA_CHANNEL LL_DMA_CHANNEL_6 -#define DS_DEBUG +#undef DS_DEBUG #ifdef DS_DEBUG #define DEBUG debug_printf @@ -54,8 +54,8 @@ static void ds_reset(void) LL_TIM_SetAutoReload(TIM3, 999); // Pull line down and start timer - LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); LL_TIM_EnableCounter(TIM3); + LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); // Wait until the timer expires while (LL_TIM_IsEnabledCounter(TIM3)) @@ -77,8 +77,8 @@ static void ds_send_byte(byte b) { LL_TIM_OC_SetCompareCH2(TIM3, ((b & m) ? 1 : 89)); // 1: 1μs pulse, 0: 89μs pulse LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE); - LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); LL_TIM_EnableCounter(TIM3); + LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); while (LL_TIM_IsEnabledCounter(TIM3)) ; } @@ -98,11 +98,11 @@ static byte ds_recv_byte(void) LL_DMA_SetDataLength(DS_DMA, DS_DMA_CHANNEL, 1); LL_DMA_EnableChannel(DS_DMA, DS_DMA_CHANNEL); LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_FORCED_ACTIVE); - LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); LL_TIM_EnableCounter(TIM3); + LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); while (LL_TIM_IsEnabledCounter(TIM3)) ; - debug_printf("XXX %08x\n", ds_dma_buffer); + DEBUG("XXX %08x\n", ds_dma_buffer); if (ds_dma_buffer & DS_PIN_MASK) out |= m; LL_DMA_DisableChannel(DS_DMA, DS_DMA_CHANNEL); @@ -121,6 +121,7 @@ static int ds_recv_block(uint n) for (uint i=0; i>= 1; } } + // debug_printf("\n"); if (crc) { @@ -152,8 +154,6 @@ void ds_test(void) ds_send_byte(0x33); ds_recv_block(8); - for(;;); - // FIXME: Configure precision for (;;) diff --git a/ssr/Src/main.c b/ssr/Src/main.c index e056fdc..cb54168 100644 --- a/ssr/Src/main.c +++ b/ssr/Src/main.c @@ -494,6 +494,10 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; LL_GPIO_Init(GPIOB, &GPIO_InitStruct); + // XXX: By some magic, the above initialization does not always work, + // so we repeat it here. + LL_GPIO_SetOutputPin(GPIOB, SSR3_Pin|SSR4_Pin|SSR1_Pin|SSR2_Pin); + } /* USER CODE BEGIN 4 */