From: Martin Mares Date: Tue, 7 Aug 2018 23:01:02 +0000 (+0200) Subject: SSR: TIM3 and DMA6 prepared for DS18B20 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=9d04b18ba06d1f57fee5d04c1ee1c47261023183;p=home-hw.git SSR: TIM3 and DMA6 prepared for DS18B20 --- diff --git a/ssr/Inc/main.h b/ssr/Inc/main.h index 488241b..000d985 100644 --- a/ssr/Inc/main.h +++ b/ssr/Inc/main.h @@ -63,6 +63,8 @@ #define LED_Pin LL_GPIO_PIN_13 #define LED_GPIO_Port GPIOC +#define THERMO_Pin LL_GPIO_PIN_7 +#define THERMO_GPIO_Port GPIOA #define SSR3_Pin LL_GPIO_PIN_10 #define SSR3_GPIO_Port GPIOB #define SSR4_Pin LL_GPIO_PIN_11 diff --git a/ssr/Inc/stm32f1xx_hal_conf.h b/ssr/Inc/stm32f1xx_hal_conf.h index 9180b49..7ef7bed 100644 --- a/ssr/Inc/stm32f1xx_hal_conf.h +++ b/ssr/Inc/stm32f1xx_hal_conf.h @@ -57,7 +57,7 @@ /*#define HAL_CORTEX_MODULE_ENABLED */ /*#define HAL_CRC_MODULE_ENABLED */ /*#define HAL_DAC_MODULE_ENABLED */ -/*#define HAL_DMA_MODULE_ENABLED */ +#define HAL_DMA_MODULE_ENABLED /*#define HAL_ETH_MODULE_ENABLED */ /*#define HAL_FLASH_MODULE_ENABLED */ /*#define HAL_GPIO_MODULE_ENABLED */ diff --git a/ssr/Inc/stm32f1xx_it.h b/ssr/Inc/stm32f1xx_it.h index 89151eb..ce7cc73 100644 --- a/ssr/Inc/stm32f1xx_it.h +++ b/ssr/Inc/stm32f1xx_it.h @@ -56,8 +56,10 @@ void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); +void DMA1_Channel6_IRQHandler(void); void USB_HP_CAN1_TX_IRQHandler(void); void USB_LP_CAN1_RX0_IRQHandler(void); +void TIM3_IRQHandler(void); void TIM4_IRQHandler(void); #ifdef __cplusplus diff --git a/ssr/Makefile b/ssr/Makefile index 0b631ed..c5f919a 100644 --- a/ssr/Makefile +++ b/ssr/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Tue Aug 07 22:22:37 CEST 2018] +# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Wed Aug 08 00:58:51 CEST 2018] ########################################################################################################################## # ------------------------------------------------ diff --git a/ssr/Src/main.c b/ssr/Src/main.c index da07b57..9d6a753 100644 --- a/ssr/Src/main.c +++ b/ssr/Src/main.c @@ -63,9 +63,11 @@ struct usb usb; /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); +static void MX_DMA_Init(void); static void MX_USB_PCD_Init(void); static void MX_TIM4_Init(void); static void MX_USART1_UART_Init(void); +static void MX_TIM3_Init(void); /* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------------------------*/ @@ -144,6 +146,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); + MX_DMA_Init(); // A hack to let USB host reset us LL_GPIO_InitTypeDef gpio; @@ -159,6 +162,7 @@ int main(void) MX_USB_PCD_Init(); MX_TIM4_Init(); MX_USART1_UART_Init(); + MX_TIM3_Init(); /* USER CODE BEGIN 2 */ usb_start(&usb); @@ -264,6 +268,80 @@ void SystemClock_Config(void) NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); } +/* 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_6, LL_DMA_DIRECTION_PERIPH_TO_MEMORY); + + LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_6, LL_DMA_PRIORITY_VERYHIGH); + + LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_6, LL_DMA_MODE_NORMAL); + + LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_6, LL_DMA_PERIPH_NOINCREMENT); + + LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_6, LL_DMA_MEMORY_INCREMENT); + + LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_6, LL_DMA_PDATAALIGN_HALFWORD); + + LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_6, LL_DMA_MDATAALIGN_HALFWORD); + + /* TIM3 interrupt Init */ + NVIC_SetPriority(TIM3_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); + NVIC_EnableIRQ(TIM3_IRQn); + + TIM_InitStruct.Prescaler = 71; + 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_PUSHPULL; + LL_GPIO_Init(THERMO_GPIO_Port, &GPIO_InitStruct); + +} + /* TIM4 init function */ static void MX_TIM4_Init(void) { @@ -360,6 +438,21 @@ static void MX_USB_PCD_Init(void) } +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Channel6_IRQn interrupt configuration */ + NVIC_SetPriority(DMA1_Channel6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0)); + NVIC_EnableIRQ(DMA1_Channel6_IRQn); + +} + /** Configure pins as * Analog * Input @@ -375,8 +468,8 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC); LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD); - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); /* LED output is OC, active low, defaults to high */ LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin); diff --git a/ssr/Src/stm32f1xx_it.c b/ssr/Src/stm32f1xx_it.c index 745832c..2b98e27 100644 --- a/ssr/Src/stm32f1xx_it.c +++ b/ssr/Src/stm32f1xx_it.c @@ -194,6 +194,20 @@ void SysTick_Handler(void) /* please refer to the startup file (startup_stm32f1xx.s). */ /******************************************************************************/ +/** +* @brief This function handles DMA1 channel6 global interrupt. +*/ +void DMA1_Channel6_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel6_IRQn 0 */ + + /* USER CODE END DMA1_Channel6_IRQn 0 */ + + /* USER CODE BEGIN DMA1_Channel6_IRQn 1 */ + + /* USER CODE END DMA1_Channel6_IRQn 1 */ +} + /** * @brief This function handles USB high priority or CAN TX interrupts. */ @@ -222,6 +236,19 @@ void USB_LP_CAN1_RX0_IRQHandler(void) /* USER CODE END USB_LP_CAN1_RX0_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 */ +} + /** * @brief This function handles TIM4 global interrupt. */ diff --git a/ssr/ssr.ioc b/ssr/ssr.ioc index b463c04..2beb1c5 100644 --- a/ssr/ssr.ioc +++ b/ssr/ssr.ioc @@ -1,41 +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_Channel6 +Dma.TIM3_CH1/TRIG.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.TIM3_CH1/TRIG.0.MemInc=DMA_MINC_ENABLE +Dma.TIM3_CH1/TRIG.0.Mode=DMA_NORMAL +Dma.TIM3_CH1/TRIG.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +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=false Mcu.Family=STM32F1 -Mcu.IP0=NVIC -Mcu.IP1=RCC -Mcu.IP2=SYS -Mcu.IP3=TIM4 -Mcu.IP4=USART1 -Mcu.IP5=USB -Mcu.IPNb=6 +Mcu.IP0=DMA +Mcu.IP1=NVIC +Mcu.IP2=RCC +Mcu.IP3=SYS +Mcu.IP4=TIM3 +Mcu.IP5=TIM4 +Mcu.IP6=USART1 +Mcu.IP7=USB +Mcu.IPNb=8 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PC13-TAMPER-RTC Mcu.Pin1=PC14-OSC32_IN -Mcu.Pin10=PA12 -Mcu.Pin11=PA13 -Mcu.Pin12=PA14 -Mcu.Pin13=PB8 -Mcu.Pin14=PB9 -Mcu.Pin15=VP_SYS_VS_Systick -Mcu.Pin16=VP_TIM4_VS_ClockSourceINT -Mcu.Pin17=VP_TIM4_VS_no_output1 +Mcu.Pin10=PA11 +Mcu.Pin11=PA12 +Mcu.Pin12=PA13 +Mcu.Pin13=PA14 +Mcu.Pin14=PB8 +Mcu.Pin15=PB9 +Mcu.Pin16=VP_SYS_VS_Systick +Mcu.Pin17=VP_TIM3_VS_ClockSourceINT +Mcu.Pin18=VP_TIM3_VS_no_output1 +Mcu.Pin19=VP_TIM4_VS_ClockSourceINT Mcu.Pin2=PC15-OSC32_OUT +Mcu.Pin20=VP_TIM4_VS_no_output1 Mcu.Pin3=PD0-OSC_IN Mcu.Pin4=PD1-OSC_OUT -Mcu.Pin5=PB10 -Mcu.Pin6=PB11 -Mcu.Pin7=PA9 -Mcu.Pin8=PA10 -Mcu.Pin9=PA11 -Mcu.PinsNb=18 +Mcu.Pin5=PA7 +Mcu.Pin6=PB10 +Mcu.Pin7=PB11 +Mcu.Pin8=PA9 +Mcu.Pin9=PA10 +Mcu.PinsNb=21 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx MxCube.Version=4.25.1 MxDb.Version=DB.4.0.251 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.DMA1_Channel6_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false @@ -44,6 +61,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false +NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true NVIC.TIM4_IRQn=true\:0\:0\:false\:false\:true\:true NVIC.USB_HP_CAN1_TX_IRQn=true\:15\:0\:true\:false\:true\:true NVIC.USB_LP_CAN1_RX0_IRQn=true\:15\:0\:true\:false\:true\:true @@ -58,6 +76,11 @@ PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK +PA7.GPIOParameters=GPIO_Speed,GPIO_Label +PA7.GPIO_Label=THERMO +PA7.GPIO_Speed=GPIO_SPEED_FREQ_HIGH +PA7.Locked=true +PA7.Signal=S_TIM3_CH2 PA9.Mode=Asynchronous PA9.Signal=USART1_TX PB10.GPIOParameters=GPIO_Label,GPIO_ModeDefaultOutputPP @@ -129,7 +152,7 @@ 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_USB_PCD_Init-USB-false-HAL-true,4-MX_TIM4_Init-TIM4-false-LL-true,5-MX_USART1_UART_Init-USART1-false-LL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-LL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-LL-false,4-MX_USB_PCD_Init-USB-false-HAL-true,5-MX_TIM4_Init-TIM4-false-LL-true,6-MX_USART1_UART_Init-USART1-false-LL-true,7-MX_TIM3_Init-TIM3-false-LL-true RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -151,6 +174,13 @@ RCC.TimSysFreq_Value=72000000 RCC.USBFreq_Value=48000000 RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5 RCC.VCOOutput2Freq_Value=8000000 +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=71 TIM4.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM4.Channel-Output\ Compare1\ No\ Output=TIM_CHANNEL_1 TIM4.CounterMode=TIM_COUNTERMODE_UP @@ -163,6 +193,10 @@ USB.IPParameters=ep0_mps USB.ep0_mps=DEP0CTL_MPS_64 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 VP_TIM4_VS_ClockSourceINT.Mode=Internal VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT VP_TIM4_VS_no_output1.Mode=Output Compare1 No Output