From ab14de6a309a19bc4342e7a91f9603ff0391957b Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 21 Jul 2018 21:42:40 +0200 Subject: [PATCH] First bits of DS18B20 communication --- nucleo-test/.mxproject | 6 +-- nucleo-test/Inc/main.h | 5 +- nucleo-test/Inc/stm32f0xx_it.h | 2 + nucleo-test/Makefile | 13 +++-- nucleo-test/Src/main.c | 96 ++++++++++++++++++++++++++++++++++ nucleo-test/Src/stm32f0xx_it.c | 27 ++++++++++ nucleo-test/Src/test.c | 77 ++++++++++++++++++++++++++- nucleo-test/mx.scratch | 23 +++++++- nucleo-test/nucleo-test.ioc | 66 +++++++++++++++++------ 9 files changed, 287 insertions(+), 28 deletions(-) diff --git a/nucleo-test/.mxproject b/nucleo-test/.mxproject index ce4d241..71c1674 100644 --- a/nucleo-test/.mxproject +++ b/nucleo-test/.mxproject @@ -2,13 +2,13 @@ HeaderPath=/aux/misc/stm/home/nucleo-test/Inc HeaderFiles=stm32f0xx_it.h;stm32_assert.h;stm32f0xx_hal_conf.h;main.h; SourcePath=/aux/misc/stm/home/nucleo-test/Src -SourceFiles=stm32f0xx_it.c;main.c; +SourceFiles=stm32f0xx_it.c;main.c;stm32f0xx_hal_msp.c; [PreviousLibFiles] -LibFiles=Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x8.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cmSimd.h; +LibFiles=Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_gpio.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_exti.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_system.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_dma.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_bus.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_cortex.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_rcc.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_utils.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_pwr.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_i2c.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_tim.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_usart.h;Drivers/STM32F0xx_HAL_Driver/Inc/stm32f0xx_ll_crs.h;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_tim.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c;Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f030x8.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Include/system_stm32f0xx.h;Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;Drivers/CMSIS/Include/arm_const_structs.h;Drivers/CMSIS/Include/cmsis_gcc.h;Drivers/CMSIS/Include/cmsis_armcc_V6.h;Drivers/CMSIS/Include/core_cmFunc.h;Drivers/CMSIS/Include/core_cm7.h;Drivers/CMSIS/Include/core_sc000.h;Drivers/CMSIS/Include/core_cmInstr.h;Drivers/CMSIS/Include/arm_math.h;Drivers/CMSIS/Include/core_cm0plus.h;Drivers/CMSIS/Include/cmsis_armcc.h;Drivers/CMSIS/Include/core_sc300.h;Drivers/CMSIS/Include/core_cm3.h;Drivers/CMSIS/Include/arm_common_tables.h;Drivers/CMSIS/Include/core_cm0.h;Drivers/CMSIS/Include/core_cm4.h;Drivers/CMSIS/Include/core_cmSimd.h; [PreviousUsedMakefileFiles] -SourceFiles=Src/main.c;Src/stm32f0xx_it.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c;/Src/system_stm32f0xx.c;/aux/misc/stm/F0-package/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;null; +SourceFiles=Src/main.c;Src/stm32f0xx_it.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_tim.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c;/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c;/Src/system_stm32f0xx.c;/aux/misc/stm/F0-package/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/system_stm32f0xx.c;/aux/misc/stm/home/nucleo-test///startup_stm32f030x8.s; HeaderPath=/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Inc;/aux/misc/stm/F0-package/Drivers/CMSIS/Device/ST/STM32F0xx/Include;/aux/misc/stm/F0-package/Drivers/CMSIS/Include;Inc; CDefines=USE_FULL_LL_DRIVER; diff --git a/nucleo-test/Inc/main.h b/nucleo-test/Inc/main.h index 732f137..fa3bf18 100644 --- a/nucleo-test/Inc/main.h +++ b/nucleo-test/Inc/main.h @@ -42,6 +42,7 @@ #define __MAIN_H__ /* Includes ------------------------------------------------------------------*/ +#include "stm32f0xx_ll_dma.h" #include "stm32f0xx_ll_i2c.h" #include "stm32f0xx_ll_crs.h" #include "stm32f0xx_ll_rcc.h" @@ -51,7 +52,7 @@ #include "stm32f0xx_ll_cortex.h" #include "stm32f0xx_ll_utils.h" #include "stm32f0xx_ll_pwr.h" -#include "stm32f0xx_ll_dma.h" +#include "stm32f0xx_ll_tim.h" #include "stm32f0xx_ll_usart.h" #include "stm32f0xx_ll_gpio.h" @@ -69,6 +70,8 @@ #define USART_RX_GPIO_Port GPIOA #define LD2_Pin LL_GPIO_PIN_5 #define LD2_GPIO_Port GPIOA +#define THERMO_Pin LL_GPIO_PIN_7 +#define THERMO_GPIO_Port GPIOA #define BMP_DONE_Pin LL_GPIO_PIN_9 #define BMP_DONE_GPIO_Port GPIOC #define TMS_Pin LL_GPIO_PIN_13 diff --git a/nucleo-test/Inc/stm32f0xx_it.h b/nucleo-test/Inc/stm32f0xx_it.h index 67701a7..d57be9f 100644 --- a/nucleo-test/Inc/stm32f0xx_it.h +++ b/nucleo-test/Inc/stm32f0xx_it.h @@ -50,6 +50,8 @@ /* Exported functions ------------------------------------------------------- */ void SysTick_Handler(void); +void DMA1_Channel4_5_IRQHandler(void); +void TIM3_IRQHandler(void); #ifdef __cplusplus } diff --git a/nucleo-test/Makefile b/nucleo-test/Makefile index 0740d1b..be48988 100644 --- a/nucleo-test/Makefile +++ b/nucleo-test/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Sat May 26 15:30:56 CEST 2018] +# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Thu Jul 05 23:11:33 CEST 2018] ########################################################################################################################## # ------------------------------------------------ @@ -10,10 +10,12 @@ # 2015-07-22 - first version # ------------------------------------------------ +.DEFAULT_GOAL := flash + ###################################### # target ###################################### -TARGET = test +TARGET = nucleo-test ###################################### @@ -57,11 +59,12 @@ Src/stm32f0xx_it.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_gpio.c \ -/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_utils.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_rcc.c \ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c \ -/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c +/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c \ +/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_tim.c \ +/aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c # ASM sources ASM_SOURCES = \ @@ -152,7 +155,7 @@ LDFLAGS = $(MCU) -specs=nano.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BU all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin flash: all - LD_LIBRARY_PATH=../stlink ../stlink/st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000 + ../bin/st-flash write $(BUILD_DIR)/$(TARGET).bin 0x8000000 ####################################### diff --git a/nucleo-test/Src/main.c b/nucleo-test/Src/main.c index ec83544..fdc17e9 100644 --- a/nucleo-test/Src/main.c +++ b/nucleo-test/Src/main.c @@ -54,8 +54,10 @@ static void LL_Init(void); void SystemClock_Config(void); static void MX_GPIO_Init(void); +static void MX_DMA_Init(void); static void MX_USART2_UART_Init(void); static void MX_I2C1_Init(void); +static void MX_TIM3_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ @@ -95,8 +97,10 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); + MX_DMA_Init(); MX_USART2_UART_Init(); MX_I2C1_Init(); + MX_TIM3_Init(); /* USER CODE BEGIN 2 */ run_test(); @@ -239,6 +243,82 @@ static void MX_I2C1_Init(void) } +/* TIM3 init function */ +static void MX_TIM3_Init(void) +{ + + LL_TIM_InitTypeDef TIM_InitStruct; + LL_TIM_OC_InitTypeDef TIM_OC_InitStruct; + + LL_GPIO_InitTypeDef GPIO_InitStruct; + + /* Peripheral clock enable */ + LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM3); + + /* TIM3 DMA Init */ + + /* TIM3_CH1_TRIG Init */ + LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_4, LL_DMA_DIRECTION_PERIPH_TO_MEMORY); + + LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PRIORITY_VERYHIGH); + + LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MODE_NORMAL); + + LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PERIPH_NOINCREMENT); + + LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MEMORY_NOINCREMENT); + + LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_PDATAALIGN_WORD); + + LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_4, LL_DMA_MDATAALIGN_WORD); + + /* TIM3 interrupt Init */ + NVIC_SetPriority(TIM3_IRQn, 0); + NVIC_EnableIRQ(TIM3_IRQn); + + TIM_InitStruct.Prescaler = 31; + TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP; + TIM_InitStruct.Autoreload = 0; + TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1; + LL_TIM_Init(TIM3, &TIM_InitStruct); + + LL_TIM_DisableARRPreload(TIM3); + + LL_TIM_SetClockSource(TIM3, LL_TIM_CLOCKSOURCE_INTERNAL); + + TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_FROZEN; + TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.CompareValue = 0; + TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_HIGH; + LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct); + + LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH1); + + TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_ACTIVE; + TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE; + TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE; + LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH2, &TIM_OC_InitStruct); + + LL_TIM_OC_DisableFast(TIM3, LL_TIM_CHANNEL_CH2); + + LL_TIM_SetTriggerOutput(TIM3, LL_TIM_TRGO_RESET); + + LL_TIM_DisableMasterSlaveMode(TIM3); + + /**TIM3 GPIO Configuration + PA7 ------> TIM3_CH2 + */ + GPIO_InitStruct.Pin = THERMO_Pin; + GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_OPENDRAIN; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + GPIO_InitStruct.Alternate = LL_GPIO_AF_1; + LL_GPIO_Init(THERMO_GPIO_Port, &GPIO_InitStruct); + +} + /* USART2 init function */ static void MX_USART2_UART_Init(void) { @@ -289,6 +369,22 @@ static void MX_USART2_UART_Init(void) } +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + /* Init with LL driver */ + /* DMA controller clock enable */ + LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1); + + /* DMA interrupt init */ + /* DMA1_Channel4_5_IRQn interrupt configuration */ + NVIC_SetPriority(DMA1_Channel4_5_IRQn, 0); + NVIC_EnableIRQ(DMA1_Channel4_5_IRQn); + +} + /** Configure pins as * Analog * Input diff --git a/nucleo-test/Src/stm32f0xx_it.c b/nucleo-test/Src/stm32f0xx_it.c index 73f4171..0c105d7 100644 --- a/nucleo-test/Src/stm32f0xx_it.c +++ b/nucleo-test/Src/stm32f0xx_it.c @@ -65,6 +65,33 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32f0xx.s). */ /******************************************************************************/ +/** +* @brief This function handles DMA1 channel 4 and 5 interrupts. +*/ +void DMA1_Channel4_5_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel4_5_IRQn 0 */ + + /* USER CODE END DMA1_Channel4_5_IRQn 0 */ + + /* USER CODE BEGIN DMA1_Channel4_5_IRQn 1 */ + + /* USER CODE END DMA1_Channel4_5_IRQn 1 */ +} + +/** +* @brief This function handles TIM3 global interrupt. +*/ +void TIM3_IRQHandler(void) +{ + /* USER CODE BEGIN TIM3_IRQn 0 */ + + /* USER CODE END TIM3_IRQn 0 */ + /* USER CODE BEGIN TIM3_IRQn 1 */ + + /* USER CODE END TIM3_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/nucleo-test/Src/test.c b/nucleo-test/Src/test.c index 4216c10..0939aeb 100644 --- a/nucleo-test/Src/test.c +++ b/nucleo-test/Src/test.c @@ -253,7 +253,7 @@ void run_test(void) } } -#else +#elif 0 static const byte Gentium23x32[] = { 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0x03, 0xF0, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0x3F, 0xFE, 0x01, 0xE0, 0x3F, 0x3E, 0x00, 0x00, 0x7F, 0x1F, 0x00, 0x00, 0x7C, 0x0F, 0x00, 0x00, 0x78, 0x0F, 0x00, 0x00, 0x78, 0x1F, 0x00, 0x00, 0x78, 0x3F, 0x00, 0x00, 0x78, 0x7F, 0x00, 0x00, 0x3E, 0xFE, 0x07, 0xC0, 0x3F, 0xFE, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0xFC, 0x0F, 0x00, // Code for char 0 @@ -419,4 +419,79 @@ void run_test(void) } } +#else + +static void ds18b20_reset(void) +{ + debug_puts("DS18B20: Reset\r\n"); + //LL_TIM_DisableCounter(TIM3); + LL_TIM_SetOnePulseMode(TIM3, LL_TIM_ONEPULSEMODE_SINGLE); + + LL_TIM_OC_InitTypeDef oc; + oc.OCMode = LL_TIM_OCMODE_FORCED_ACTIVE; + oc.OCState = LL_TIM_OCSTATE_ENABLE; + oc.OCNState = LL_TIM_OCSTATE_DISABLE; + oc.CompareValue = 480; + oc.OCPolarity = LL_TIM_OCPOLARITY_LOW; + LL_TIM_OC_Init(TIM3, LL_TIM_CHANNEL_CH2, &oc); + + LL_TIM_SetAutoReload(TIM3, 999); + LL_TIM_OC_SetMode(TIM3, LL_TIM_CHANNEL_CH2, LL_TIM_OCMODE_INACTIVE); + + LL_TIM_EnableCounter(TIM3); + while (!LL_TIM_IsEnabledCounter(TIM3)) + ; + // Counter is automatically disabled at the end of cycle +} + +static void ds18b20_send_byte(byte b) +{ + LL_TIM_SetAutoReload(TIM3, 99); + for (uint m=0x80; m; m >>= 1) + { + LL_TIM_OC_SetCompareCH2(TIM3, ((b & m) ? 1 : 89)); + 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); + while (LL_TIM_IsEnabledCounter(TIM3)) + ; + // Counter is automatically disabled at the end of cycle + } +} + +void run_test(void) +{ + uint cnt = 0; + + debug_puts("Init\r\n"); + NVIC_DisableIRQ(TIM3_IRQn); + +#if 0 + LL_GPIO_InitTypeDef GPIO_InitStruct; + GPIO_InitStruct.Pin = THERMO_Pin; + GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT; + GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; + GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL; + GPIO_InitStruct.Pull = LL_GPIO_PULL_NO; + LL_GPIO_Init(THERMO_GPIO_Port, &GPIO_InitStruct); + LL_GPIO_SetOutputPin(THERMO_GPIO_Port, THERMO_Pin); +#endif + + ds18b20_reset(); + + for (;;) + { + LL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + + debug_printf("Tick tock: %d\r\n", cnt); + // ds18b20_send_byte(0xcc); + ds18b20_reset(); + + LL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + + LL_mDelay(100); + cnt++; + } +} + #endif diff --git a/nucleo-test/mx.scratch b/nucleo-test/mx.scratch index c8eb2e7..500b164 100644 --- a/nucleo-test/mx.scratch +++ b/nucleo-test/mx.scratch @@ -9,6 +9,21 @@ + Src/stm32f0xx_hal_msp.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_tim_ex.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_rcc_ex.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_i2c_ex.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_gpio.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_dma.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_cortex.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_pwr_ex.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_hal_flash_ex.c @@ -17,6 +32,7 @@ + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy @@ -79,14 +95,17 @@ /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_exti.c - /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c - /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_dma.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_i2c.c /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_pwr.c + + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_tim.c + /aux/misc/stm/F0-package/Drivers/STM32F0xx_HAL_Driver/Src/stm32f0xx_ll_usart.c diff --git a/nucleo-test/nucleo-test.ioc b/nucleo-test/nucleo-test.ioc index ab551df..0873135 100644 --- a/nucleo-test/nucleo-test.ioc +++ b/nucleo-test/nucleo-test.ioc @@ -1,40 +1,58 @@ #MicroXplorer Configuration settings - do not modify +Dma.Request0=TIM3_CH1/TRIG +Dma.RequestsNb=1 +Dma.TIM3_CH1/TRIG.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.TIM3_CH1/TRIG.0.Instance=DMA1_Channel4 +Dma.TIM3_CH1/TRIG.0.MemDataAlignment=DMA_MDATAALIGN_WORD +Dma.TIM3_CH1/TRIG.0.MemInc=DMA_MINC_DISABLE +Dma.TIM3_CH1/TRIG.0.Mode=DMA_NORMAL +Dma.TIM3_CH1/TRIG.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD +Dma.TIM3_CH1/TRIG.0.PeriphInc=DMA_PINC_DISABLE +Dma.TIM3_CH1/TRIG.0.Priority=DMA_PRIORITY_VERY_HIGH +Dma.TIM3_CH1/TRIG.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority File.Version=6 KeepUserPlacement=true Mcu.Family=STM32F0 -Mcu.IP0=I2C1 -Mcu.IP1=NVIC -Mcu.IP2=RCC -Mcu.IP3=SYS -Mcu.IP4=USART2 -Mcu.IPNb=5 +Mcu.IP0=DMA +Mcu.IP1=I2C1 +Mcu.IP2=NVIC +Mcu.IP3=RCC +Mcu.IP4=SYS +Mcu.IP5=TIM3 +Mcu.IP6=USART2 +Mcu.IPNb=7 Mcu.Name=STM32F030R8Tx Mcu.Package=LQFP64 Mcu.Pin0=PC13 Mcu.Pin1=PC14-OSC32_IN -Mcu.Pin10=PA14 -Mcu.Pin11=PB8 -Mcu.Pin12=PB9 -Mcu.Pin13=VP_SYS_VS_Systick +Mcu.Pin10=PA13 +Mcu.Pin11=PA14 +Mcu.Pin12=PB8 +Mcu.Pin13=PB9 +Mcu.Pin14=VP_SYS_VS_Systick +Mcu.Pin15=VP_TIM3_VS_ClockSourceINT +Mcu.Pin16=VP_TIM3_VS_no_output1 Mcu.Pin2=PC15-OSC32_OUT Mcu.Pin3=PF0-OSC_IN Mcu.Pin4=PF1-OSC_OUT Mcu.Pin5=PA2 Mcu.Pin6=PA3 Mcu.Pin7=PA5 -Mcu.Pin8=PC9 -Mcu.Pin9=PA13 -Mcu.PinsNb=14 +Mcu.Pin8=PA7 +Mcu.Pin9=PC9 +Mcu.PinsNb=17 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F030R8Tx MxCube.Version=4.25.1 MxDb.Version=DB.4.0.251 +NVIC.DMA1_Channel4_5_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:false\:false NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:false\:false NVIC.SVC_IRQn=true\:0\:0\:false\:false\:false\:false NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true +NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true PA13.GPIOParameters=GPIO_Label PA13.GPIO_Label=TMS PA13.Locked=true @@ -68,6 +86,11 @@ PA5.GPIO_PuPd=GPIO_NOPULL PA5.GPIO_Speed=GPIO_SPEED_FREQ_LOW PA5.Locked=true PA5.Signal=GPIO_Output +PA7.GPIOParameters=GPIO_ModeDefaultPP,GPIO_Speed,GPIO_Label +PA7.GPIO_Label=THERMO +PA7.GPIO_ModeDefaultPP=GPIO_MODE_AF_OD +PA7.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PA7.Signal=S_TIM3_CH2 PB8.Locked=true PB8.Mode=I2C PB8.Signal=I2C1_SCL @@ -122,13 +145,13 @@ ProjectManager.LibraryCopy=2 ProjectManager.MainLocation=Src ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=test.ioc -ProjectManager.ProjectName=test +ProjectManager.ProjectFileName=nucleo-test.ioc +ProjectManager.ProjectName=nucleo-test ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-LL-true,2-SystemClock_Config-RCC-false-LL-false,3-MX_USART2_UART_Init-USART2-false-LL-true,4-MX_I2C1_Init-I2C1-false-LL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-LL-true,2-MX_DMA_Init-DMA-false-LL-true,3-SystemClock_Config-RCC-false-LL-false,4-MX_USART2_UART_Init-USART2-false-LL-true,5-MX_I2C1_Init-I2C1-false-LL-true,6-MX_TIM3_Init-TIM3-false-LL-true RCC.AHBFreq_Value=32000000 RCC.APB1Freq_Value=32000000 RCC.APB1TimFreq_Value=32000000 @@ -147,10 +170,21 @@ RCC.TimSysFreq_Value=32000000 RCC.USART1Freq_Value=32000000 SH.GPXTI13.0=GPIO_EXTI13 SH.GPXTI13.ConfNb=1 +SH.S_TIM3_CH2.0=TIM3_CH2,Output Compare2 CH2 +SH.S_TIM3_CH2.ConfNb=1 +TIM3.Channel-Output\ Compare1\ No\ Output=TIM_CHANNEL_1 +TIM3.Channel-Output\ Compare2\ CH2=TIM_CHANNEL_2 +TIM3.IPParameters=Channel-Output Compare1 No Output,Channel-Output Compare2 CH2,Prescaler,OCMode_2 +TIM3.OCMode_2=TIM_OCMODE_ACTIVE +TIM3.Prescaler=31 USART2.BaudRate=115200 USART2.IPParameters=VirtualMode-Asynchronous,BaudRate USART2.VirtualMode-Asynchronous=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT +VP_TIM3_VS_no_output1.Mode=Output Compare1 No Output +VP_TIM3_VS_no_output1.Signal=TIM3_VS_no_output1 board=NUCLEO-F030R8 boardIOC=true -- 2.39.2