4343/*
4444优先级分组为4,只有0~15的16级抢占优先级
4545
46- 优先级
47- 0 1 2 3 4 5 ...
48- 保留 TIM4(时基) 按键外部中断 按键外部中断
49- TIM3
50- TIM2
46+
47+ 优先级 0 1 2 3 4 5 ...
48+ 保留 TIM4(时基) 按键外部中断 按键外部中断 TIM6(辅助时基)
49+ TIM3(PWNM) TIM7(辅助时基)
50+ TIM2(多功能)
51+ */
52+
53+ /*
54+ CPU内部 FLASH 【0x0800 0000 - 0x080F FFFF】,容量512K(0x80000)字节
55+ CPU内部 SRAM1 【0x2000 0000 - 0x2000 FFFF】,容量64K(0x10000)字节
56+
57+ 外部扩展SRAM 在块1区3 【0x6800 0000 - 0x681F FFFF】,容量1M(0x100000)字节
58+ TFT LCD地址 在块1区4 【0x6C000000 | 0x000007FE, +2】, 仅占用2个端口地址(使用A10连接RS引脚)
5159*/
5260
5361/*___________________________器件IO配置___________________________________________*/
@@ -856,7 +864,7 @@ void Process_TIM2_IC_CallBack_Channel_4(void)
856864 if (percent < 0 ) percent = 0 ;
857865 if (percent > 100 ) percent = 100.0 ;
858866 percent /= 100.0 ;
859- compare = (float )tim2arr * percent ;
867+ compare = (( float )tim2arr ) * percent ;
860868 switch (channel )
861869 {
862870 case TIM2PWM_Channel_1 : TIM2 -> CCR1 = (u32 )compare ;break ;
@@ -871,6 +879,148 @@ void Process_TIM2_IC_CallBack_Channel_4(void)
871879#endif
872880
873881
882+ /*________________________________________用户定时器1PWM配置_________________________________________________________*/
883+ #if STSTEM_TIM1PWM_ENABLE
884+ TIM_HandleTypeDef TIM1_Handler ;
885+
886+ void sys_TIM1PWM_ENABLE (void )
887+ {
888+
889+ TIM_ClockConfigTypeDef sClockSourceConfig ;
890+ TIM_MasterConfigTypeDef sMasterConfig ;
891+ TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig ;
892+ TIM_OC_InitTypeDef sConfigOC ;
893+
894+ TIM1_Handler .Instance = TIM1 ;
895+ TIM1_Handler .Init .Prescaler = (72 - 1 );
896+ TIM1_Handler .Init .CounterMode = TIM_COUNTERMODE_UP ;
897+ TIM1_Handler .Init .Period = tim1arr ; //重装载值,16位
898+ TIM1_Handler .Init .ClockDivision = TIM_CLOCKDIVISION_DIV1 ;
899+ TIM1_Handler .Init .RepetitionCounter = 0 ;
900+ HAL_TIM_Base_Init (& TIM1_Handler );
901+
902+ sClockSourceConfig .ClockSource = TIM_CLOCKSOURCE_INTERNAL ; //时钟源来自内部(不启用外部ETR引脚作为时钟源)
903+ HAL_TIM_ConfigClockSource (& TIM1_Handler , & sClockSourceConfig );
904+
905+ HAL_TIM_PWM_Init (& TIM1_Handler );
906+
907+ /*如果要用主从定时器,参考https://my.oschina.net/u/4315748/blog/3220499*/
908+ sMasterConfig .MasterOutputTrigger = TIM_TRGO_RESET ; //不输出信号给其他外设
909+ sMasterConfig .MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE ; //不使用定时器主从功能,即不用TIM1的定时中断作为其他定时器的计数源
910+ HAL_TIMEx_MasterConfigSynchronization (& TIM1_Handler , & sMasterConfig );
911+
912+ sBreakDeadTimeConfig .OffStateRunMode = TIM_OSSR_DISABLE ; //默认disable()
913+ sBreakDeadTimeConfig .OffStateIDLEMode = TIM_OSSI_DISABLE ; //默认disable
914+ sBreakDeadTimeConfig .LockLevel = TIM_LOCKLEVEL_3 ; //锁定参数级别,如果死区等参数不再变的话就把LOCK调到最高级
915+ /*死区时间设计:DeadTime的8个bits定义如下:DT为死区时间,Tdts为1/72M~13.9ns
916+ DTG[7:5]=0xx => DT = DTG[7:0] x Tdtg, Tdtg = Tdts; 最大1.764us
917+ DTG[7:5]=10x => DT = (64+DTG[5:0]) x Tdtg, Tdtg = 2 x Tdts; 最大3.5288us
918+ DTG[7:5]=110 => DT = (32+DTG[4:0]) x Tdtg, Tdtg = 8 x Tdts; 最大7us
919+ DTG[7:5]=111 => DT = (32+DTG[4:0]) x Tdtg, Tdtg = 16 x Tdts; 最大14us(此时值为0xff)
920+ 要3us则设为0xab
921+ */
922+ sBreakDeadTimeConfig .DeadTime = 0xab ; //死区时间设置 0x00~0xff
923+ #if STSTEM_TIM1PWM_useBreak
924+ sBreakDeadTimeConfig .BreakState = TIM_BREAK_ENABLE ; //使能或失能TIMx刹车输入
925+ #else
926+ sBreakDeadTimeConfig .BreakState = TIM_BREAK_DISABLE ;
927+ #endif
928+ sBreakDeadTimeConfig .BreakFilter = 0xa ; //刹车输入滤波,0x0~0xF
929+ sBreakDeadTimeConfig .BreakPolarity = TIM_BREAKPOLARITY_LOW ; //刹车输入脚极性
930+ sBreakDeadTimeConfig .AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE ; //默认
931+ HAL_TIMEx_ConfigBreakDeadTime (& TIM1_Handler , & sBreakDeadTimeConfig );
932+
933+ sConfigOC .OCMode = TIM_OCMODE_PWM1 ; //向上计数时,PWM1模式就是计数小于占空比值(TIMx_CNT<TIMx_CCR1),IO变为有效极性,否则相反
934+ sConfigOC .Pulse = tim1arr /2 ; //占空比值(捕获比较值,16位)
935+ sConfigOC .OCPolarity = TIM_OCPOLARITY_HIGH ; //可选此通道的有效极性为高还是低
936+ sConfigOC .OCNPolarity = TIM_OCNPOLARITY_LOW ; //可选互补通道的有效极性
937+ sConfigOC .OCFastMode = TIM_OCFAST_DISABLE ; //disable就好
938+ sConfigOC .OCIdleState = TIM_OCIDLESTATE_RESET ; //空闲电平极性选择(没有启用时的电平,谨慎修改)(也有可能是刹车时的电平)
939+ sConfigOC .OCNIdleState = TIM_OCNIDLESTATE_RESET ;
940+ HAL_TIM_PWM_ConfigChannel (& TIM1_Handler , & sConfigOC , TIM_CHANNEL_1 );
941+
942+ sConfigOC .Pulse = tim1arr /2 ;
943+ HAL_TIM_PWM_ConfigChannel (& TIM1_Handler , & sConfigOC , TIM_CHANNEL_2 );
944+
945+ sConfigOC .Pulse = tim1arr /2 ;
946+ HAL_TIM_PWM_ConfigChannel (& TIM1_Handler , & sConfigOC , TIM_CHANNEL_3 );
947+
948+ sConfigOC .Pulse = tim1arr /2 ;
949+ HAL_TIM_PWM_ConfigChannel (& TIM1_Handler , & sConfigOC , TIM_CHANNEL_4 );
950+ }
951+
952+
953+ void TIM1_set_Channel_Pulse (u8 channel ,float percent )
954+ {
955+ float compare ;
956+ if (percent < 0 ) percent = 0 ;
957+ if (percent > 100 ) percent = 100.0 ;
958+ percent /= 100.0 ;
959+ compare = ((float )tim1arr ) * percent ;
960+ switch (channel )
961+ {
962+ case TIM1PWM_Channel_1 : TIM1 -> CCR1 = (u32 )compare ;break ;
963+ case TIM1PWM_Channel_2 : TIM1 -> CCR2 = (u32 )compare ;break ;
964+ case TIM1PWM_Channel_3 : TIM1 -> CCR3 = (u32 )compare ;break ;
965+ case TIM1PWM_Channel_4 : TIM1 -> CCR4 = (u32 )compare ;break ;
966+ default :break ;
967+ }
968+ }
969+
970+
971+ #endif
972+
973+ /*________________________________________用户定时器6配置_________________________________________________________*/
974+ #if (STSTEM_TIM6_ENABLE ) && ((STM32F103xG ) || (STM32F103xE ))
975+
976+ TIM_HandleTypeDef TIM6_Handler ;
977+ void sys_TIM6_ENABLE (void )
978+ {
979+ TIM4_Handler .Instance = TIM6 ; //基本定时器6
980+ TIM4_Handler .Init .Prescaler = (72 - 1 ); //分频系数
981+ TIM4_Handler .Init .CounterMode = TIM_COUNTERMODE_UP ; //向上计数器
982+ TIM4_Handler .Init .Period = tim6arr ; //自动装载值
983+ TIM4_Handler .Init .ClockDivision = TIM_CLOCKDIVISION_DIV1 ; //时钟分频因子
984+ HAL_TIM_Base_Init (& TIM6_Handler );
985+
986+ HAL_TIM_Base_Start_IT (& TIM6_Handler ); //使能定时器6和定时器6更新中断:TIM_IT_UPDATE
987+ }
988+
989+
990+ //定时器6中断服务函数
991+ void TIM6_IRQHandler (void )
992+ {
993+ HAL_TIM_IRQHandler (& TIM6_Handler );
994+ }
995+
996+ #endif
997+
998+ /*________________________________________用户定时器7配置_________________________________________________________*/
999+ #if (STSTEM_TIM7_ENABLE ) && ((STM32F103xG ) || (STM32F103xE ))
1000+
1001+ TIM_HandleTypeDef TIM7_Handler ;
1002+ void sys_TIM7_ENABLE (void )
1003+ {
1004+ TIM4_Handler .Instance = TIM7 ; //基本定时器7
1005+ TIM4_Handler .Init .Prescaler = (72 - 1 ); //分频系数
1006+ TIM4_Handler .Init .CounterMode = TIM_COUNTERMODE_UP ; //向上计数器
1007+ TIM4_Handler .Init .Period = tim7arr ; //自动装载值
1008+ TIM4_Handler .Init .ClockDivision = TIM_CLOCKDIVISION_DIV1 ; //时钟分频因子
1009+ HAL_TIM_Base_Init (& TIM7_Handler );
1010+
1011+ HAL_TIM_Base_Start_IT (& TIM7_Handler ); //使能定时器6和定时器7更新中断:TIM_IT_UPDATE
1012+ }
1013+
1014+
1015+ //定时器7中断服务函数
1016+ void TIM7_IRQHandler (void )
1017+ {
1018+ HAL_TIM_IRQHandler (& TIM7_Handler );
1019+ }
1020+
1021+ #endif
1022+
1023+
8741024/*________________________________________用户ADC1配置_________________________________________________________*/
8751025#if SYSTEM_ADC1_ENABLE
8761026
0 commit comments