@@ -0,0 +1,157 @@ | |||
#MicroXplorer Configuration settings - do not modify | |||
File.Version=6 | |||
GPIO.groupedBy=Group By Peripherals | |||
KeepUserPlacement=false | |||
Mcu.Family=STM32G0 | |||
Mcu.IP0=NVIC | |||
Mcu.IP1=RCC | |||
Mcu.IP2=SYS | |||
Mcu.IP3=TIM2 | |||
Mcu.IP4=USART2 | |||
Mcu.IPNb=5 | |||
Mcu.Name=STM32G031F(4-6-8)Px | |||
Mcu.Package=TSSOP20 | |||
Mcu.Pin0=PA0 | |||
Mcu.Pin1=PA1 | |||
Mcu.Pin10=PB6 | |||
Mcu.Pin11=VP_SYS_VS_Systick | |||
Mcu.Pin12=VP_TIM2_VS_ClockSourceINT | |||
Mcu.Pin2=PA2 | |||
Mcu.Pin3=PA3 | |||
Mcu.Pin4=PA4 | |||
Mcu.Pin5=PA5 | |||
Mcu.Pin6=PA6 | |||
Mcu.Pin7=PA7 | |||
Mcu.Pin8=PA13 | |||
Mcu.Pin9=PA14-BOOT0 | |||
Mcu.PinsNb=13 | |||
Mcu.ThirdPartyNb=0 | |||
Mcu.UserConstants= | |||
Mcu.UserName=STM32G031F8Px | |||
MxCube.Version=6.1.1 | |||
MxDb.Version=DB.6.0.10 | |||
NVIC.EXTI4_15_IRQn=true\:0\:0\:false\:false\:true\:true\:true | |||
NVIC.ForceEnableDMAVector=true | |||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false | |||
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false | |||
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false | |||
NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false | |||
NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true | |||
PA0.Locked=true | |||
PA0.Signal=S_TIM2_CH1 | |||
PA1.Signal=S_TIM2_CH2 | |||
PA13.Mode=Serial_Wire | |||
PA13.Signal=SYS_SWDIO | |||
PA14-BOOT0.Mode=Serial_Wire | |||
PA14-BOOT0.Signal=SYS_SWCLK | |||
PA2.Mode=Asynchronous | |||
PA2.Signal=USART2_TX | |||
PA3.Mode=Asynchronous | |||
PA3.Signal=USART2_RX | |||
PA4.GPIOParameters=GPIO_Label | |||
PA4.GPIO_Label=Case1 | |||
PA4.Locked=true | |||
PA4.Signal=GPXTI4 | |||
PA5.GPIOParameters=GPIO_Label | |||
PA5.GPIO_Label=Case2 | |||
PA5.Locked=true | |||
PA5.Signal=GPXTI5 | |||
PA6.GPIOParameters=GPIO_Label | |||
PA6.GPIO_Label=CPU | |||
PA6.Locked=true | |||
PA6.Signal=GPXTI6 | |||
PA7.GPIOParameters=GPIO_Label | |||
PA7.GPIO_Label=GPU | |||
PA7.Locked=true | |||
PA7.Signal=GPXTI7 | |||
PB6.GPIOParameters=GPIO_PuPd,GPIO_Label | |||
PB6.GPIO_Label=Switch | |||
PB6.GPIO_PuPd=GPIO_PULLDOWN | |||
PB6.Locked=true | |||
PB6.Signal=GPIO_Input | |||
PinOutPanel.RotationAngle=0 | |||
ProjectManager.AskForMigrate=true | |||
ProjectManager.BackupPrevious=false | |||
ProjectManager.CompilerOptimize=6 | |||
ProjectManager.ComputerToolchain=false | |||
ProjectManager.CoupleFile=false | |||
ProjectManager.CustomerFirmwarePackage= | |||
ProjectManager.DefaultFWLocation=true | |||
ProjectManager.DeletePrevious=true | |||
ProjectManager.DeviceId=STM32G031F8Px | |||
ProjectManager.FirmwarePackage=STM32Cube FW_G0 V1.4.1 | |||
ProjectManager.FreePins=false | |||
ProjectManager.HalAssertFull=false | |||
ProjectManager.HeapSize=0x200 | |||
ProjectManager.KeepUserCode=true | |||
ProjectManager.LastFirmware=true | |||
ProjectManager.LibraryCopy=1 | |||
ProjectManager.MainLocation=Core/Src | |||
ProjectManager.NoMain=false | |||
ProjectManager.PreviousToolchain= | |||
ProjectManager.ProjectBuild=false | |||
ProjectManager.ProjectFileName=fans.ioc | |||
ProjectManager.ProjectName=fans | |||
ProjectManager.RegisterCallBack= | |||
ProjectManager.StackSize=0x400 | |||
ProjectManager.TargetToolchain=STM32CubeIDE | |||
ProjectManager.ToolChainLocation= | |||
ProjectManager.UnderRoot=true | |||
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_TIM2_Init-TIM2-false-HAL-true,4-MX_USART2_UART_Init-USART2-false-HAL-true | |||
RCC.ADCFreq_Value=16000000 | |||
RCC.AHBFreq_Value=16000000 | |||
RCC.APBFreq_Value=16000000 | |||
RCC.APBTimFreq_Value=16000000 | |||
RCC.CortexFreq_Value=16000000 | |||
RCC.EXTERNAL_CLOCK_VALUE=12288000 | |||
RCC.FCLKCortexFreq_Value=16000000 | |||
RCC.FamilyName=M | |||
RCC.HCLKFreq_Value=16000000 | |||
RCC.HSE_VALUE=8000000 | |||
RCC.HSI_VALUE=16000000 | |||
RCC.I2C1Freq_Value=16000000 | |||
RCC.I2S1Freq_Value=16000000 | |||
RCC.IPParameters=ADCFreq_Value,AHBFreq_Value,APBFreq_Value,APBTimFreq_Value,CortexFreq_Value,EXTERNAL_CLOCK_VALUE,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2C1Freq_Value,I2S1Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPUART1Freq_Value,LSCOPinFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,PLLPoutputFreq_Value,PLLQoutputFreq_Value,PLLRCLKFreq_Value,PWRFreq_Value,SYSCLKFreq_VALUE,TIM1Freq_Value,USART1Freq_Value,VCOInputFreq_Value,VCOOutputFreq_Value | |||
RCC.LPTIM1Freq_Value=16000000 | |||
RCC.LPTIM2Freq_Value=16000000 | |||
RCC.LPUART1Freq_Value=16000000 | |||
RCC.LSCOPinFreq_Value=32000 | |||
RCC.LSE_VALUE=32768 | |||
RCC.LSI_VALUE=32000 | |||
RCC.MCO1PinFreq_Value=16000000 | |||
RCC.PLLPoutputFreq_Value=64000000 | |||
RCC.PLLQoutputFreq_Value=64000000 | |||
RCC.PLLRCLKFreq_Value=64000000 | |||
RCC.PWRFreq_Value=16000000 | |||
RCC.SYSCLKFreq_VALUE=16000000 | |||
RCC.TIM1Freq_Value=16000000 | |||
RCC.USART1Freq_Value=16000000 | |||
RCC.VCOInputFreq_Value=16000000 | |||
RCC.VCOOutputFreq_Value=128000000 | |||
SH.GPXTI4.0=GPIO_EXTI4 | |||
SH.GPXTI4.ConfNb=1 | |||
SH.GPXTI5.0=GPIO_EXTI5 | |||
SH.GPXTI5.ConfNb=1 | |||
SH.GPXTI6.0=GPIO_EXTI6 | |||
SH.GPXTI6.ConfNb=1 | |||
SH.GPXTI7.0=GPIO_EXTI7 | |||
SH.GPXTI7.ConfNb=1 | |||
SH.S_TIM2_CH1.0=TIM2_CH1,PWM Generation1 CH1 | |||
SH.S_TIM2_CH1.ConfNb=1 | |||
SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 | |||
SH.S_TIM2_CH2.ConfNb=1 | |||
TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE | |||
TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 | |||
TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 | |||
TIM2.ClockDivision=TIM_CLOCKDIVISION_DIV1 | |||
TIM2.IPParameters=Channel-PWM Generation1 CH1,Period,AutoReloadPreload,ClockDivision,Channel-PWM Generation2 CH2 | |||
TIM2.Period=640 | |||
USART2.IPParameters=VirtualMode-Asynchronous,Mode | |||
USART2.Mode=MODE_TX | |||
USART2.VirtualMode-Asynchronous=VM_ASYNC | |||
VP_SYS_VS_Systick.Mode=SysTick | |||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick | |||
VP_TIM2_VS_ClockSourceINT.Mode=Internal | |||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT | |||
board=custom | |||
isbadioc=false |
@@ -0,0 +1,631 @@ | |||
EESchema Schematic File Version 4 | |||
EELAYER 30 0 | |||
EELAYER END | |||
$Descr A4 11693 8268 | |||
encoding utf-8 | |||
Sheet 1 1 | |||
Title "A PC fan controller that doesn't (completely) suck" | |||
Date "2021-04-25" | |||
Rev "" | |||
Comp "" | |||
Comment1 "" | |||
Comment2 "" | |||
Comment3 "" | |||
Comment4 "" | |||
$EndDescr | |||
$Comp | |||
L stm32g031f8-mcu_st_stm32g0:STM32G031F8-MCU_ST_STM32G0 U1 | |||
U 1 1 60DA6FFF | |||
P 3400 4150 | |||
F 0 "U1" H 4450 4800 50 0000 C CNN | |||
F 1 "STM32G031F8" H 4450 4700 50 0000 C CNN | |||
F 2 "Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm" H 3400 4150 50 0001 C CNN | |||
F 3 "" H 3400 4150 50 0001 C CNN | |||
1 3400 4150 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L power:+3V3 #PWR03 | |||
U 1 1 60DA8EE8 | |||
P 3900 3500 | |||
F 0 "#PWR03" H 3900 3350 50 0001 C CNN | |||
F 1 "+3V3" H 3915 3673 50 0000 C CNN | |||
F 2 "" H 3900 3500 50 0001 C CNN | |||
F 3 "" H 3900 3500 50 0001 C CNN | |||
1 3900 3500 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L power:GND #PWR04 | |||
U 1 1 60DA975A | |||
P 3900 5100 | |||
F 0 "#PWR04" H 3900 4850 50 0001 C CNN | |||
F 1 "GND" H 3905 4927 50 0000 C CNN | |||
F 2 "" H 3900 5100 50 0001 C CNN | |||
F 3 "" H 3900 5100 50 0001 C CNN | |||
1 3900 5100 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L Device:C_Small C2 | |||
U 1 1 60DAAAE6 | |||
P 2250 4250 | |||
F 0 "C2" H 2342 4296 50 0000 L CNN | |||
F 1 "4.7µF" H 2342 4205 50 0000 L CNN | |||
F 2 "" H 2250 4250 50 0001 C CNN | |||
F 3 "~" H 2250 4250 50 0001 C CNN | |||
1 2250 4250 | |||
1 0 0 -1 | |||
$EndComp | |||
Text GLabel 4900 3950 2 50 Input ~ 0 | |||
SWCLK | |||
Text GLabel 4900 4050 2 50 BiDi ~ 0 | |||
SWDIO | |||
Text GLabel 2900 4750 0 50 Input ~ 0 | |||
Rx | |||
Text GLabel 2900 4650 0 50 Output ~ 0 | |||
Tx | |||
Text GLabel 2900 4550 0 50 Output ~ 0 | |||
Control_Case2 | |||
Text GLabel 2900 4450 0 50 Output ~ 0 | |||
Control_Case1 | |||
$Comp | |||
L Device:C_Small C1 | |||
U 1 1 60DAAEA6 | |||
P 2050 4250 | |||
F 0 "C1" H 1850 4300 50 0000 L CNN | |||
F 1 "100nF" H 1700 4200 50 0000 L CNN | |||
F 2 "" H 2050 4250 50 0001 C CNN | |||
F 3 "~" H 2050 4250 50 0001 C CNN | |||
1 2050 4250 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
3900 3500 2250 3500 | |||
Wire Wire Line | |||
2050 3500 2050 4150 | |||
Connection ~ 3900 3500 | |||
Wire Wire Line | |||
2050 4350 2050 5050 | |||
Wire Wire Line | |||
2050 5050 2250 5050 | |||
Connection ~ 3900 5050 | |||
Wire Wire Line | |||
2250 4350 2250 5050 | |||
Connection ~ 2250 5050 | |||
Wire Wire Line | |||
2250 5050 3900 5050 | |||
Wire Wire Line | |||
2250 4150 2250 3500 | |||
Connection ~ 2250 3500 | |||
Wire Wire Line | |||
2250 3500 2050 3500 | |||
$Comp | |||
L Connector_Generic:Conn_02x03_Odd_Even J1 | |||
U 1 1 60DBB72D | |||
P 2750 3050 | |||
F 0 "J1" H 2800 3367 50 0000 C CNN | |||
F 1 "Dbg Header" H 2800 3276 50 0000 C CNN | |||
F 2 "" H 2750 3050 50 0001 C CNN | |||
F 3 "~" H 2750 3050 50 0001 C CNN | |||
1 2750 3050 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L Regulator_Linear:MCP1700-3302E_TO92 U2 | |||
U 1 1 60DCAC22 | |||
P 8950 2050 | |||
F 0 "U2" H 8950 1808 50 0000 C CNN | |||
F 1 "MCP1700-3302E" H 8950 1899 50 0000 C CNN | |||
F 2 "Package_TO_SOT_THT:TO-92_Inline" H 8950 1850 50 0001 C CIN | |||
F 3 "http://ww1.microchip.com/downloads/en/DeviceDoc/20001826D.pdf" H 8950 2050 50 0001 C CNN | |||
1 8950 2050 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L power:+5V #PWR022 | |||
U 1 1 60DCF9FC | |||
P 9450 2050 | |||
F 0 "#PWR022" H 9450 1900 50 0001 C CNN | |||
F 1 "+5V" H 9465 2223 50 0000 C CNN | |||
F 2 "" H 9450 2050 50 0001 C CNN | |||
F 3 "" H 9450 2050 50 0001 C CNN | |||
1 9450 2050 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
9450 2050 9250 2050 | |||
$Comp | |||
L power:+3V3 #PWR018 | |||
U 1 1 60DD0622 | |||
P 8450 2050 | |||
F 0 "#PWR018" H 8450 1900 50 0001 C CNN | |||
F 1 "+3V3" H 8465 2223 50 0000 C CNN | |||
F 2 "" H 8450 2050 50 0001 C CNN | |||
F 3 "" H 8450 2050 50 0001 C CNN | |||
1 8450 2050 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
8650 2050 8450 2050 | |||
$Comp | |||
L power:GND #PWR021 | |||
U 1 1 60DD390D | |||
P 8950 2350 | |||
F 0 "#PWR021" H 8950 2100 50 0001 C CNN | |||
F 1 "GND" H 8955 2177 50 0000 C CNN | |||
F 2 "" H 8950 2350 50 0001 C CNN | |||
F 3 "" H 8950 2350 50 0001 C CNN | |||
1 8950 2350 | |||
1 0 0 -1 | |||
$EndComp | |||
NoConn ~ 2900 3850 | |||
NoConn ~ 2900 3950 | |||
NoConn ~ 2900 4050 | |||
NoConn ~ 2900 4350 | |||
NoConn ~ 4900 4150 | |||
NoConn ~ 4900 4250 | |||
NoConn ~ 4900 4350 | |||
Text GLabel 3050 3050 2 50 BiDi ~ 0 | |||
SWDIO | |||
Text GLabel 2550 3050 0 50 Input ~ 0 | |||
SWCLK | |||
$Comp | |||
L power:+3V3 #PWR01 | |||
U 1 1 60E6284A | |||
P 2400 2950 | |||
F 0 "#PWR01" H 2400 2800 50 0001 C CNN | |||
F 1 "+3V3" H 2415 3123 50 0000 C CNN | |||
F 2 "" H 2400 2950 50 0001 C CNN | |||
F 3 "" H 2400 2950 50 0001 C CNN | |||
1 2400 2950 | |||
1 0 0 -1 | |||
$EndComp | |||
Text GLabel 3050 3150 2 50 Input ~ 0 | |||
Rx | |||
Text GLabel 2550 3150 0 50 Output ~ 0 | |||
Tx | |||
Wire Wire Line | |||
2400 2950 2550 2950 | |||
$Comp | |||
L power:GND #PWR02 | |||
U 1 1 60E7DBF6 | |||
P 3550 2950 | |||
F 0 "#PWR02" H 3550 2700 50 0001 C CNN | |||
F 1 "GND" H 3555 2777 50 0000 C CNN | |||
F 2 "" H 3550 2950 50 0001 C CNN | |||
F 3 "" H 3550 2950 50 0001 C CNN | |||
1 3550 2950 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
3050 2950 3550 2950 | |||
Text GLabel 4900 4450 2 50 Input ~ 0 | |||
Tach_GPU | |||
Text GLabel 4900 4550 2 50 Input ~ 0 | |||
Tach_CPU | |||
Text GLabel 4900 4650 2 50 Input ~ 0 | |||
Tach_Case2 | |||
Text GLabel 4900 4750 2 50 Input ~ 0 | |||
Tach_Case1 | |||
$Comp | |||
L Device:R_Small R1 | |||
U 1 1 60EE221B | |||
P 5400 4000 | |||
F 0 "R1" H 5459 4046 50 0000 L CNN | |||
F 1 "internal" H 5459 3955 50 0000 L CNN | |||
F 2 "" H 5400 4000 50 0001 C CNN | |||
F 3 "~" H 5400 4000 50 0001 C CNN | |||
1 5400 4000 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
4900 3850 5400 3850 | |||
$Comp | |||
L power:GND #PWR05 | |||
U 1 1 60EE38A0 | |||
P 5400 4100 | |||
F 0 "#PWR05" H 5400 3850 50 0001 C CNN | |||
F 1 "GND" H 5405 3927 50 0000 C CNN | |||
F 2 "" H 5400 4100 50 0001 C CNN | |||
F 3 "" H 5400 4100 50 0001 C CNN | |||
1 5400 4100 | |||
1 0 0 -1 | |||
$EndComp | |||
Connection ~ 5400 3850 | |||
$Comp | |||
L Jumper:Jumper_2_Bridged JP1 | |||
U 1 1 60EF0FB5 | |||
P 5400 3550 | |||
F 0 "JP1" H 5400 3745 50 0000 C CNN | |||
F 1 "Jumper" H 5400 3654 50 0000 C CNN | |||
F 2 "" H 5400 3550 50 0001 C CNN | |||
F 3 "~" H 5400 3550 50 0001 C CNN | |||
1 5400 3550 | |||
0 -1 -1 0 | |||
$EndComp | |||
$Comp | |||
L power:+3V3 #PWR06 | |||
U 1 1 60EF4753 | |||
P 5400 3250 | |||
F 0 "#PWR06" H 5400 3100 50 0001 C CNN | |||
F 1 "+3V3" H 5415 3423 50 0000 C CNN | |||
F 2 "" H 5400 3250 50 0001 C CNN | |||
F 3 "" H 5400 3250 50 0001 C CNN | |||
1 5400 3250 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
5400 3850 5400 3900 | |||
$Comp | |||
L Connector_Generic:Conn_01x04 J6 | |||
U 1 1 60D8ABE0 | |||
P 7900 4850 | |||
F 0 "J6" H 7850 4400 50 0000 L CNN | |||
F 1 "Case Fan 1" H 7700 4500 50 0000 L CNN | |||
F 2 "" H 7900 4850 50 0001 C CNN | |||
F 3 "~" H 7900 4850 50 0001 C CNN | |||
1 7900 4850 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L Connector_Generic:Conn_01x02 J2 | |||
U 1 1 60D8ABF5 | |||
P 6300 3850 | |||
F 0 "J2" H 6300 3500 50 0000 C CNN | |||
F 1 "GPU In" H 6300 3600 50 0000 C CNN | |||
F 2 "" H 6300 3850 50 0001 C CNN | |||
F 3 "~" H 6300 3850 50 0001 C CNN | |||
1 6300 3850 | |||
-1 0 0 1 | |||
$EndComp | |||
Text GLabel 8100 4650 2 50 Input ~ 0 | |||
Control_Case1 | |||
$Comp | |||
L Device:R_Small R5 | |||
U 1 1 60DA6930 | |||
P 9000 4550 | |||
F 0 "R5" H 9059 4596 50 0000 L CNN | |||
F 1 "10k" H 9059 4505 50 0000 L CNN | |||
F 2 "" H 9000 4550 50 0001 C CNN | |||
F 3 "~" H 9000 4550 50 0001 C CNN | |||
1 9000 4550 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
8100 4750 9000 4750 | |||
$Comp | |||
L power:+3V3 #PWR020 | |||
U 1 1 60DA9398 | |||
P 9000 4450 | |||
F 0 "#PWR020" H 9000 4300 50 0001 C CNN | |||
F 1 "+3V3" H 9015 4623 50 0000 C CNN | |||
F 2 "" H 9000 4450 50 0001 C CNN | |||
F 3 "" H 9000 4450 50 0001 C CNN | |||
1 9000 4450 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L Device:C_Small C3 | |||
U 1 1 60DAB1BE | |||
P 6850 4950 | |||
F 0 "C3" H 6758 4904 50 0000 R CNN | |||
F 1 "15nF" H 6758 4995 50 0000 R CNN | |||
F 2 "" H 6850 4950 50 0001 C CNN | |||
F 3 "~" H 6850 4950 50 0001 C CNN | |||
1 6850 4950 | |||
-1 0 0 1 | |||
$EndComp | |||
Wire Wire Line | |||
9000 4650 9000 4750 | |||
Connection ~ 9000 4750 | |||
Text GLabel 9300 4750 2 50 Output ~ 0 | |||
Tach_Case1 | |||
$Comp | |||
L Device:D_Small D2 | |||
U 1 1 60DBBBC9 | |||
P 8200 4950 | |||
F 0 "D2" H 8200 5157 50 0000 C CNN | |||
F 1 "1N4148" H 8200 5066 50 0000 C CNN | |||
F 2 "" V 8200 4950 50 0001 C CNN | |||
F 3 "~" V 8200 4950 50 0001 C CNN | |||
1 8200 4950 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L power:GND #PWR015 | |||
U 1 1 60DBCEF7 | |||
P 8500 5000 | |||
F 0 "#PWR015" H 8500 4750 50 0001 C CNN | |||
F 1 "GND" H 8505 4827 50 0000 C CNN | |||
F 2 "" H 8500 5000 50 0001 C CNN | |||
F 3 "" H 8500 5000 50 0001 C CNN | |||
1 8500 5000 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L power:+12V #PWR017 | |||
U 1 1 60DC51B1 | |||
P 8750 4450 | |||
F 0 "#PWR017" H 8750 4300 50 0001 C CNN | |||
F 1 "+12V" H 8765 4623 50 0000 C CNN | |||
F 2 "" H 8750 4450 50 0001 C CNN | |||
F 3 "" H 8750 4450 50 0001 C CNN | |||
1 8750 4450 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
8100 4850 8750 4850 | |||
Wire Wire Line | |||
8750 4850 8750 4450 | |||
Wire Wire Line | |||
8300 4950 8500 4950 | |||
Wire Wire Line | |||
9000 4750 9300 4750 | |||
$Comp | |||
L Connector_Generic:Conn_01x04 J5 | |||
U 1 1 60DE61A0 | |||
P 7900 3750 | |||
F 0 "J5" H 7850 3300 50 0000 L CNN | |||
F 1 "Case Fan 2" H 7700 3400 50 0000 L CNN | |||
F 2 "" H 7900 3750 50 0001 C CNN | |||
F 3 "~" H 7900 3750 50 0001 C CNN | |||
1 7900 3750 | |||
-1 0 0 1 | |||
$EndComp | |||
Text GLabel 8100 3550 2 50 Input ~ 0 | |||
Control_Case2 | |||
$Comp | |||
L Device:R_Small R4 | |||
U 1 1 60DE61A7 | |||
P 9000 3450 | |||
F 0 "R4" H 9059 3496 50 0000 L CNN | |||
F 1 "10k" H 9059 3405 50 0000 L CNN | |||
F 2 "" H 9000 3450 50 0001 C CNN | |||
F 3 "~" H 9000 3450 50 0001 C CNN | |||
1 9000 3450 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
8100 3650 9000 3650 | |||
$Comp | |||
L power:+3V3 #PWR019 | |||
U 1 1 60DE61AE | |||
P 9000 3350 | |||
F 0 "#PWR019" H 9000 3200 50 0001 C CNN | |||
F 1 "+3V3" H 9015 3523 50 0000 C CNN | |||
F 2 "" H 9000 3350 50 0001 C CNN | |||
F 3 "" H 9000 3350 50 0001 C CNN | |||
1 9000 3350 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L Device:C_Small C4 | |||
U 1 1 60DE61B4 | |||
P 9000 3750 | |||
F 0 "C4" H 8908 3704 50 0000 R CNN | |||
F 1 "15nF" H 8908 3795 50 0000 R CNN | |||
F 2 "" H 9000 3750 50 0001 C CNN | |||
F 3 "~" H 9000 3750 50 0001 C CNN | |||
1 9000 3750 | |||
-1 0 0 1 | |||
$EndComp | |||
Wire Wire Line | |||
9000 3550 9000 3650 | |||
Connection ~ 9000 3650 | |||
Text GLabel 9300 3650 2 50 Output ~ 0 | |||
Tach_Case2 | |||
$Comp | |||
L Device:D_Small D1 | |||
U 1 1 60DE61BD | |||
P 8200 3850 | |||
F 0 "D1" H 8200 4057 50 0000 C CNN | |||
F 1 "1N4148" H 8200 3966 50 0000 C CNN | |||
F 2 "" V 8200 3850 50 0001 C CNN | |||
F 3 "~" V 8200 3850 50 0001 C CNN | |||
1 8200 3850 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L power:GND #PWR014 | |||
U 1 1 60DE61C3 | |||
P 8500 3900 | |||
F 0 "#PWR014" H 8500 3650 50 0001 C CNN | |||
F 1 "GND" H 8505 3727 50 0000 C CNN | |||
F 2 "" H 8500 3900 50 0001 C CNN | |||
F 3 "" H 8500 3900 50 0001 C CNN | |||
1 8500 3900 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L power:+12V #PWR016 | |||
U 1 1 60DE61C9 | |||
P 8750 3350 | |||
F 0 "#PWR016" H 8750 3200 50 0001 C CNN | |||
F 1 "+12V" H 8765 3523 50 0000 C CNN | |||
F 2 "" H 8750 3350 50 0001 C CNN | |||
F 3 "" H 8750 3350 50 0001 C CNN | |||
1 8750 3350 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
8100 3750 8750 3750 | |||
Wire Wire Line | |||
8750 3750 8750 3350 | |||
Wire Wire Line | |||
8300 3850 8500 3850 | |||
Wire Wire Line | |||
8500 3850 9000 3850 | |||
Connection ~ 8500 3850 | |||
Wire Wire Line | |||
9000 3650 9300 3650 | |||
Wire Wire Line | |||
8500 4950 8500 5000 | |||
Wire Wire Line | |||
8500 3850 8500 3900 | |||
$Comp | |||
L Device:R_Small R2 | |||
U 1 1 60E31FC0 | |||
P 6850 3550 | |||
F 0 "R2" H 6909 3596 50 0000 L CNN | |||
F 1 "10k" H 6909 3505 50 0000 L CNN | |||
F 2 "" H 6850 3550 50 0001 C CNN | |||
F 3 "~" H 6850 3550 50 0001 C CNN | |||
1 6850 3550 | |||
1 0 0 -1 | |||
$EndComp | |||
$Comp | |||
L power:+3V3 #PWR09 | |||
U 1 1 60E34A71 | |||
P 6850 3450 | |||
F 0 "#PWR09" H 6850 3300 50 0001 C CNN | |||
F 1 "+3V3" H 6865 3623 50 0000 C CNN | |||
F 2 "" H 6850 3450 50 0001 C CNN | |||
F 3 "" H 6850 3450 50 0001 C CNN | |||
1 6850 3450 | |||
1 0 0 -1 | |||
$EndComp | |||
Text GLabel 7100 3750 2 50 Output ~ 0 | |||
Tach_GPU | |||
$Comp | |||
L Device:R_Small R3 | |||
U 1 1 60E4EEDF | |||
P 6850 4650 | |||
F 0 "R3" H 6909 4696 50 0000 L CNN | |||
F 1 "10k" H 6909 4605 50 0000 L CNN | |||
F 2 "" H 6850 4650 50 0001 C CNN | |||
F 3 "~" H 6850 4650 50 0001 C CNN | |||
1 6850 4650 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
6500 4850 6850 4850 | |||
$Comp | |||
L power:+3V3 #PWR010 | |||
U 1 1 60E4EEE6 | |||
P 6850 4550 | |||
F 0 "#PWR010" H 6850 4400 50 0001 C CNN | |||
F 1 "+3V3" H 6865 4723 50 0000 C CNN | |||
F 2 "" H 6850 4550 50 0001 C CNN | |||
F 3 "" H 6850 4550 50 0001 C CNN | |||
1 6850 4550 | |||
1 0 0 -1 | |||
$EndComp | |||
Text GLabel 7100 4850 2 50 Output ~ 0 | |||
Tach_CPU | |||
Wire Wire Line | |||
6850 4850 7100 4850 | |||
Connection ~ 6850 4850 | |||
$Comp | |||
L Connector_Generic:Conn_01x02 J3 | |||
U 1 1 60E4EED9 | |||
P 6300 4950 | |||
F 0 "J3" H 6300 4600 50 0000 C CNN | |||
F 1 "CPU In" H 6300 4700 50 0000 C CNN | |||
F 2 "" H 6300 4950 50 0001 C CNN | |||
F 3 "~" H 6300 4950 50 0001 C CNN | |||
1 6300 4950 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L power:GND #PWR08 | |||
U 1 1 60E4EEEF | |||
P 6500 5050 | |||
F 0 "#PWR08" H 6500 4800 50 0001 C CNN | |||
F 1 "GND" H 6505 4877 50 0000 C CNN | |||
F 2 "" H 6500 5050 50 0001 C CNN | |||
F 3 "" H 6500 5050 50 0001 C CNN | |||
1 6500 5050 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
6500 3850 6500 3900 | |||
$Comp | |||
L power:GND #PWR07 | |||
U 1 1 60E42A45 | |||
P 6500 3900 | |||
F 0 "#PWR07" H 6500 3650 50 0001 C CNN | |||
F 1 "GND" H 6505 3727 50 0000 C CNN | |||
F 2 "" H 6500 3900 50 0001 C CNN | |||
F 3 "" H 6500 3900 50 0001 C CNN | |||
1 6500 3900 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
6850 5050 6500 5050 | |||
Wire Wire Line | |||
6850 4750 6850 4850 | |||
Wire Wire Line | |||
6500 3750 6850 3750 | |||
Wire Wire Line | |||
6850 3650 6850 3750 | |||
Connection ~ 6850 3750 | |||
Wire Wire Line | |||
6850 3750 7100 3750 | |||
$Comp | |||
L Connector_Generic:Conn_01x04 J4 | |||
U 1 1 60DB3615 | |||
P 7450 2200 | |||
F 0 "J4" H 7700 2100 50 0000 C CNN | |||
F 1 "Power In" H 7550 2200 50 0000 L CNN | |||
F 2 "" H 7450 2200 50 0001 C CNN | |||
F 3 "~" H 7450 2200 50 0001 C CNN | |||
1 7450 2200 | |||
-1 0 0 1 | |||
$EndComp | |||
$Comp | |||
L power:+12V #PWR013 | |||
U 1 1 60DB43E7 | |||
P 8000 2300 | |||
F 0 "#PWR013" H 8000 2150 50 0001 C CNN | |||
F 1 "+12V" H 8015 2473 50 0000 C CNN | |||
F 2 "" H 8000 2300 50 0001 C CNN | |||
F 3 "" H 8000 2300 50 0001 C CNN | |||
1 8000 2300 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
7650 2300 8000 2300 | |||
$Comp | |||
L power:+5V #PWR012 | |||
U 1 1 60DB5C23 | |||
P 8000 2000 | |||
F 0 "#PWR012" H 8000 1850 50 0001 C CNN | |||
F 1 "+5V" H 8015 2173 50 0000 C CNN | |||
F 2 "" H 8000 2000 50 0001 C CNN | |||
F 3 "" H 8000 2000 50 0001 C CNN | |||
1 8000 2000 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
7650 2000 8000 2000 | |||
$Comp | |||
L power:GND #PWR011 | |||
U 1 1 60DB744F | |||
P 7700 2400 | |||
F 0 "#PWR011" H 7700 2150 50 0001 C CNN | |||
F 1 "GND" H 7705 2227 50 0000 C CNN | |||
F 2 "" H 7700 2400 50 0001 C CNN | |||
F 3 "" H 7700 2400 50 0001 C CNN | |||
1 7700 2400 | |||
1 0 0 -1 | |||
$EndComp | |||
Wire Wire Line | |||
7650 2100 7700 2100 | |||
Wire Wire Line | |||
7700 2100 7700 2200 | |||
Wire Wire Line | |||
7650 2200 7700 2200 | |||
Connection ~ 7700 2200 | |||
Wire Wire Line | |||
7700 2200 7700 2400 | |||
Wire Wire Line | |||
6500 4950 6500 5050 | |||
Connection ~ 6500 5050 | |||
Wire Wire Line | |||
5400 3750 5400 3850 | |||
Wire Wire Line | |||
5400 3250 5400 3350 | |||
Wire Wire Line | |||
3900 5050 3900 5100 | |||
$EndSCHEMATC |
@@ -0,0 +1,467 @@ | |||
/* USER CODE BEGIN Header */ | |||
/** | |||
****************************************************************************** | |||
* @file : main.c | |||
* @brief : Main program body | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2021 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* USER CODE END Header */ | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "main.h" | |||
/* Private includes ----------------------------------------------------------*/ | |||
/* USER CODE BEGIN Includes */ | |||
#include "string.h" | |||
#include "stdio.h" | |||
/* USER CODE END Includes */ | |||
/* Private typedef -----------------------------------------------------------*/ | |||
/* USER CODE BEGIN PTD */ | |||
/* USER CODE END PTD */ | |||
/* Private define ------------------------------------------------------------*/ | |||
/* USER CODE BEGIN PD */ | |||
#define TIMEBASE 1000 | |||
#define PWM_MINIMUM 20 | |||
/* USER CODE END PD */ | |||
/* Private macro -------------------------------------------------------------*/ | |||
/* USER CODE BEGIN PM */ | |||
/* USER CODE END PM */ | |||
/* Private variables ---------------------------------------------------------*/ | |||
TIM_HandleTypeDef htim2; | |||
UART_HandleTypeDef huart2; | |||
/* USER CODE BEGIN PV */ | |||
const uint16_t GPU_STAGES[] = {900, 1400, 1800, 2200}; | |||
const uint16_t CPU_STAGES[] = {850, 900, 1000, 1200}; | |||
uint32_t freq_count_gpu; | |||
uint32_t freq_count_cpu; | |||
uint32_t freq_count_case1; | |||
uint32_t freq_count_case2; | |||
uint32_t last_gpu; | |||
uint32_t last_cpu; | |||
uint32_t last_case1; | |||
uint32_t last_case2; | |||
uint16_t rpm_gpu; | |||
uint16_t rpm_cpu; | |||
uint16_t rpm_case1; | |||
uint16_t rpm_case2; | |||
uint32_t pwm_fan1; | |||
uint32_t pwm_fan2; | |||
uint8_t gpu_stage; | |||
uint8_t cpu_stage; | |||
uint8_t current_stage; | |||
char msg[256]; | |||
/* USER CODE END PV */ | |||
/* Private function prototypes -----------------------------------------------*/ | |||
void SystemClock_Config(void); | |||
static void MX_GPIO_Init(void); | |||
static void MX_TIM2_Init(void); | |||
static void MX_USART2_UART_Init(void); | |||
/* USER CODE BEGIN PFP */ | |||
/* USER CODE END PFP */ | |||
/* Private user code ---------------------------------------------------------*/ | |||
/* USER CODE BEGIN 0 */ | |||
int max(uint8_t a, uint8_t b) { | |||
if (a > b) { | |||
return a; | |||
} | |||
return b; | |||
} | |||
/* USER CODE END 0 */ | |||
/** | |||
* @brief The application entry point. | |||
* @retval int | |||
*/ | |||
int main(void) | |||
{ | |||
/* USER CODE BEGIN 1 */ | |||
/* USER CODE END 1 */ | |||
/* MCU Configuration--------------------------------------------------------*/ | |||
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ | |||
HAL_Init(); | |||
/* USER CODE BEGIN Init */ | |||
/* USER CODE END Init */ | |||
/* Configure the system clock */ | |||
SystemClock_Config(); | |||
/* USER CODE BEGIN SysInit */ | |||
/* USER CODE END SysInit */ | |||
/* Initialize all configured peripherals */ | |||
MX_GPIO_Init(); | |||
MX_TIM2_Init(); | |||
MX_USART2_UART_Init(); | |||
/* USER CODE BEGIN 2 */ | |||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); | |||
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); | |||
/* USER CODE END 2 */ | |||
/* Infinite loop */ | |||
/* USER CODE BEGIN WHILE */ | |||
while (1) | |||
{ | |||
if (HAL_GPIO_ReadPin(Switch_GPIO_Port, Switch_Pin) == GPIO_PIN_SET) { | |||
// do stuff | |||
} | |||
if (rpm_gpu < GPU_STAGES[0]) { | |||
gpu_stage = 1; | |||
} else if (rpm_gpu < GPU_STAGES[1]) { | |||
gpu_stage = 2; | |||
} else if (rpm_gpu < GPU_STAGES[2]) { | |||
gpu_stage = 3; | |||
} else if (rpm_gpu < GPU_STAGES[3]) { | |||
gpu_stage = 4; | |||
} else { | |||
gpu_stage = 5; | |||
} | |||
if (rpm_cpu < CPU_STAGES[0]) { | |||
cpu_stage = 1; | |||
} else if (rpm_cpu < CPU_STAGES[1]) { | |||
cpu_stage = 2; | |||
} else if (rpm_cpu < CPU_STAGES[2]) { | |||
cpu_stage = 3; | |||
} else if (rpm_cpu < CPU_STAGES[3]) { | |||
cpu_stage = 4; | |||
} else { | |||
cpu_stage = 5; | |||
} | |||
current_stage = max(gpu_stage, cpu_stage); | |||
if (current_stage == 1) { | |||
pwm_fan1 = PWM_MINIMUM; | |||
} else if (current_stage == 2) { | |||
pwm_fan1 = 35; | |||
} else if (current_stage == 3) { | |||
pwm_fan1 = 50; | |||
} else if (current_stage == 4) { | |||
pwm_fan1 = 80; | |||
} else { | |||
pwm_fan1 = 100; | |||
} | |||
// For now | |||
pwm_fan2 = pwm_fan1; | |||
// Write the value after converting from duty cycle to raw value. | |||
TIM2->CCR1 = htim2.Init.Period * pwm_fan1 / 100; | |||
TIM2->CCR2 = htim2.Init.Period * pwm_fan2 / 100; | |||
// If the fans don't spin, the rpm won't be updated as no | |||
// interrupts are called. This resets those values every two seconds. | |||
if (HAL_GetTick() - last_gpu >= TIMEBASE * 2) { | |||
rpm_gpu = 0; | |||
freq_count_gpu = 0; | |||
} | |||
if (HAL_GetTick() - last_cpu >= TIMEBASE * 2) { | |||
rpm_cpu = 0; | |||
freq_count_cpu = 0; | |||
} | |||
if (HAL_GetTick() - last_case1 >= TIMEBASE * 2) { | |||
rpm_case1 = 0; | |||
freq_count_case1 = 0; | |||
} | |||
if (HAL_GetTick() - last_case2 >= TIMEBASE * 2) { | |||
rpm_case2 = 0; | |||
freq_count_case2 = 0; | |||
} | |||
sprintf(msg, "GPU: %u RPM\nCPU: %u RPM\nCase 1: %u RPM\nCase2: %u RPM\n", rpm_gpu, rpm_cpu, rpm_case1, rpm_case2); | |||
HAL_UART_Transmit(&huart2, (uint8_t *) msg, strlen(msg), 100); | |||
sprintf(msg, "PWM Case 1: %lu %%\nPWM Case 2: %lu %%\n\n", pwm_fan1, pwm_fan2); | |||
HAL_UART_Transmit(&huart2, (uint8_t *) msg, strlen(msg), 100); | |||
HAL_Delay(1000); | |||
/* USER CODE END WHILE */ | |||
/* USER CODE BEGIN 3 */ | |||
} | |||
/* USER CODE END 3 */ | |||
} | |||
/** | |||
* @brief System Clock Configuration | |||
* @retval None | |||
*/ | |||
void SystemClock_Config(void) | |||
{ | |||
RCC_OscInitTypeDef RCC_OscInitStruct = {0}; | |||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; | |||
/** Configure the main internal regulator output voltage | |||
*/ | |||
HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); | |||
/** Initializes the RCC Oscillators according to the specified parameters | |||
* in the RCC_OscInitTypeDef structure. | |||
*/ | |||
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; | |||
RCC_OscInitStruct.HSIState = RCC_HSI_ON; | |||
RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; | |||
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; | |||
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; | |||
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/** Initializes the CPU, AHB and APB buses clocks | |||
*/ | |||
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK | |||
|RCC_CLOCKTYPE_PCLK1; | |||
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; | |||
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; | |||
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; | |||
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
} | |||
/** | |||
* @brief TIM2 Initialization Function | |||
* @param None | |||
* @retval None | |||
*/ | |||
static void MX_TIM2_Init(void) | |||
{ | |||
/* USER CODE BEGIN TIM2_Init 0 */ | |||
/* USER CODE END TIM2_Init 0 */ | |||
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; | |||
TIM_MasterConfigTypeDef sMasterConfig = {0}; | |||
TIM_OC_InitTypeDef sConfigOC = {0}; | |||
/* USER CODE BEGIN TIM2_Init 1 */ | |||
/* USER CODE END TIM2_Init 1 */ | |||
htim2.Instance = TIM2; | |||
htim2.Init.Prescaler = 0; | |||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; | |||
htim2.Init.Period = 640; | |||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; | |||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; | |||
if (HAL_TIM_Base_Init(&htim2) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; | |||
if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; | |||
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; | |||
if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
sConfigOC.OCMode = TIM_OCMODE_PWM1; | |||
sConfigOC.Pulse = 0; | |||
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; | |||
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; | |||
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/* USER CODE BEGIN TIM2_Init 2 */ | |||
/* USER CODE END TIM2_Init 2 */ | |||
HAL_TIM_MspPostInit(&htim2); | |||
} | |||
/** | |||
* @brief USART2 Initialization Function | |||
* @param None | |||
* @retval None | |||
*/ | |||
static void MX_USART2_UART_Init(void) | |||
{ | |||
/* USER CODE BEGIN USART2_Init 0 */ | |||
/* USER CODE END USART2_Init 0 */ | |||
/* USER CODE BEGIN USART2_Init 1 */ | |||
/* USER CODE END USART2_Init 1 */ | |||
huart2.Instance = USART2; | |||
huart2.Init.BaudRate = 115200; | |||
huart2.Init.WordLength = UART_WORDLENGTH_8B; | |||
huart2.Init.StopBits = UART_STOPBITS_1; | |||
huart2.Init.Parity = UART_PARITY_NONE; | |||
huart2.Init.Mode = UART_MODE_TX; | |||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; | |||
huart2.Init.OverSampling = UART_OVERSAMPLING_16; | |||
huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; | |||
huart2.Init.ClockPrescaler = UART_PRESCALER_DIV1; | |||
huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; | |||
if (HAL_UART_Init(&huart2) != HAL_OK) | |||
{ | |||
Error_Handler(); | |||
} | |||
/* USER CODE BEGIN USART2_Init 2 */ | |||
/* USER CODE END USART2_Init 2 */ | |||
} | |||
/** | |||
* @brief GPIO Initialization Function | |||
* @param None | |||
* @retval None | |||
*/ | |||
static void MX_GPIO_Init(void) | |||
{ | |||
GPIO_InitTypeDef GPIO_InitStruct = {0}; | |||
/* GPIO Ports Clock Enable */ | |||
__HAL_RCC_GPIOA_CLK_ENABLE(); | |||
__HAL_RCC_GPIOB_CLK_ENABLE(); | |||
/*Configure GPIO pins : Case1_Pin Case2_Pin CPU_Pin GPU_Pin */ | |||
GPIO_InitStruct.Pin = Case1_Pin|Case2_Pin|CPU_Pin|GPU_Pin; | |||
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; | |||
GPIO_InitStruct.Pull = GPIO_NOPULL; | |||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); | |||
/*Configure GPIO pin : Switch_Pin */ | |||
GPIO_InitStruct.Pin = Switch_Pin; | |||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; | |||
GPIO_InitStruct.Pull = GPIO_PULLDOWN; | |||
HAL_GPIO_Init(Switch_GPIO_Port, &GPIO_InitStruct); | |||
/* EXTI interrupt init*/ | |||
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0); | |||
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn); | |||
} | |||
/* USER CODE BEGIN 4 */ | |||
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) { | |||
if (GPIO_Pin == GPU_Pin) { | |||
if ((HAL_GetTick() - last_gpu) <= TIMEBASE) { | |||
freq_count_gpu++; | |||
} else { | |||
rpm_gpu = freq_count_gpu * 60 / 2; | |||
last_gpu = HAL_GetTick(); | |||
freq_count_gpu = 0; | |||
} | |||
} | |||
if (GPIO_Pin == CPU_Pin) { | |||
if ((HAL_GetTick() - last_cpu) <= TIMEBASE) { | |||
freq_count_cpu++; | |||
} else { | |||
rpm_cpu = freq_count_cpu * 60 / 2; | |||
last_cpu = HAL_GetTick(); | |||
freq_count_cpu = 0; | |||
} | |||
} | |||
if (GPIO_Pin == Case1_Pin) { | |||
if ((HAL_GetTick() - last_case1) <= TIMEBASE) { | |||
freq_count_case1++; | |||
} else { | |||
rpm_case1 = freq_count_case1 * 60 / 2; | |||
last_case1 = HAL_GetTick(); | |||
freq_count_case1 = 0; | |||
} | |||
} | |||
if (GPIO_Pin == Case2_Pin) { | |||
if ((HAL_GetTick() - last_case2) <= TIMEBASE) { | |||
freq_count_case2++; | |||
} else { | |||
rpm_case2 = freq_count_case2 * 60 / 2; | |||
last_case2 = HAL_GetTick(); | |||
freq_count_case2 = 0; | |||
} | |||
} | |||
} | |||
/* USER CODE END 4 */ | |||
/** | |||
* @brief This function is executed in case of error occurrence. | |||
* @retval None | |||
*/ | |||
void Error_Handler(void) | |||
{ | |||
/* USER CODE BEGIN Error_Handler_Debug */ | |||
/* User can add his own implementation to report the HAL error return state */ | |||
__disable_irq(); | |||
while (1) | |||
{ | |||
} | |||
/* USER CODE END Error_Handler_Debug */ | |||
} | |||
#ifdef USE_FULL_ASSERT | |||
/** | |||
* @brief Reports the name of the source file and the source line number | |||
* where the assert_param error has occurred. | |||
* @param file: pointer to the source file name | |||
* @param line: assert_param error line source number | |||
* @retval None | |||
*/ | |||
void assert_failed(uint8_t *file, uint32_t line) | |||
{ | |||
/* USER CODE BEGIN 6 */ | |||
/* User can add his own implementation to report the file name and line number, | |||
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ | |||
/* USER CODE END 6 */ | |||
} | |||
#endif /* USE_FULL_ASSERT */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |
@@ -0,0 +1,87 @@ | |||
/* USER CODE BEGIN Header */ | |||
/** | |||
****************************************************************************** | |||
* @file : main.h | |||
* @brief : Header for main.c file. | |||
* This file contains the common defines of the application. | |||
****************************************************************************** | |||
* @attention | |||
* | |||
* <h2><center>© Copyright (c) 2021 STMicroelectronics. | |||
* All rights reserved.</center></h2> | |||
* | |||
* This software component is licensed by ST under BSD 3-Clause license, | |||
* the "License"; You may not use this file except in compliance with the | |||
* License. You may obtain a copy of the License at: | |||
* opensource.org/licenses/BSD-3-Clause | |||
* | |||
****************************************************************************** | |||
*/ | |||
/* USER CODE END Header */ | |||
/* Define to prevent recursive inclusion -------------------------------------*/ | |||
#ifndef __MAIN_H | |||
#define __MAIN_H | |||
#ifdef __cplusplus | |||
extern "C" { | |||
#endif | |||
/* Includes ------------------------------------------------------------------*/ | |||
#include "stm32g0xx_hal.h" | |||
/* Private includes ----------------------------------------------------------*/ | |||
/* USER CODE BEGIN Includes */ | |||
/* USER CODE END Includes */ | |||
/* Exported types ------------------------------------------------------------*/ | |||
/* USER CODE BEGIN ET */ | |||
/* USER CODE END ET */ | |||
/* Exported constants --------------------------------------------------------*/ | |||
/* USER CODE BEGIN EC */ | |||
/* USER CODE END EC */ | |||
/* Exported macro ------------------------------------------------------------*/ | |||
/* USER CODE BEGIN EM */ | |||
/* USER CODE END EM */ | |||
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); | |||
/* Exported functions prototypes ---------------------------------------------*/ | |||
void Error_Handler(void); | |||
/* USER CODE BEGIN EFP */ | |||
/* USER CODE END EFP */ | |||
/* Private defines -----------------------------------------------------------*/ | |||
#define Case1_Pin GPIO_PIN_4 | |||
#define Case1_GPIO_Port GPIOA | |||
#define Case1_EXTI_IRQn EXTI4_15_IRQn | |||
#define Case2_Pin GPIO_PIN_5 | |||
#define Case2_GPIO_Port GPIOA | |||
#define Case2_EXTI_IRQn EXTI4_15_IRQn | |||
#define CPU_Pin GPIO_PIN_6 | |||
#define CPU_GPIO_Port GPIOA | |||
#define CPU_EXTI_IRQn EXTI4_15_IRQn | |||
#define GPU_Pin GPIO_PIN_7 | |||
#define GPU_GPIO_Port GPIOA | |||
#define GPU_EXTI_IRQn EXTI4_15_IRQn | |||
#define Switch_Pin GPIO_PIN_6 | |||
#define Switch_GPIO_Port GPIOB | |||
/* USER CODE BEGIN Private defines */ | |||
/* USER CODE END Private defines */ | |||
#ifdef __cplusplus | |||
} | |||
#endif | |||
#endif /* __MAIN_H */ | |||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |