diff --git a/.cproject b/.cproject index d2abd27..6939cb5 100644 --- a/.cproject +++ b/.cproject @@ -40,8 +40,8 @@ - - + + diff --git a/.settings/com.st.stm32cube.ide.mcu.sfr.prefs b/.settings/com.st.stm32cube.ide.mcu.sfr.prefs new file mode 100644 index 0000000..9a8cd0a --- /dev/null +++ b/.settings/com.st.stm32cube.ide.mcu.sfr.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +svd_custom_file_path= +svd_file_path=platform\:/plugin/com.st.stm32cube.ide.mcu.productdb.debug/resources/cmsis/STMicroelectronics_CMSIS_SVD/STM32F103.svd diff --git a/ATK-DNM144Z-M3 APM32E103版 V1.0.pdf b/ATK-DNM144Z-M3 APM32E103版 V1.0.pdf new file mode 100644 index 0000000..2ba8ccf Binary files /dev/null and b/ATK-DNM144Z-M3 APM32E103版 V1.0.pdf differ diff --git a/Core/Src/main.c b/Core/Src/main.c index 1f7e4e6..5f3932c 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -216,7 +216,7 @@ static void MX_TIM7_Init(void) htim7.Instance = TIM7; htim7.Init.Prescaler = 71; htim7.Init.CounterMode = TIM_COUNTERMODE_UP; - htim7.Init.Period = 100; + htim7.Init.Period = 99; htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim7) != HAL_OK) { @@ -274,10 +274,6 @@ static void MX_TIM8_Init(void) { Error_Handler(); } - if (HAL_TIM_OC_Init(&htim8) != HAL_OK) - { - Error_Handler(); - } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) @@ -295,16 +291,15 @@ static void MX_TIM8_Init(void) { Error_Handler(); } - sConfigOC.OCMode = TIM_OCMODE_TIMING; - if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_OC_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } diff --git a/README.md b/README.md index 5d9994e..6e1a96b 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ STM32 TIM8_CH4:PA9 ÊäÈë²¶»ñÒý½Å: - PA7 + PA0 Êä³öÒý½Å: CH1:PA1 CH2:PA2 diff --git a/light_src_ctrl_stm32_port.ioc b/light_src_ctrl_stm32_port.ioc index 0357287..b833dbc 100644 --- a/light_src_ctrl_stm32_port.ioc +++ b/light_src_ctrl_stm32_port.ioc @@ -130,7 +130,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_TIM5_Init-TIM5-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM6_Init-TIM6-false-HAL-true,6-MX_TIM7_Init-TIM7-false-HAL-true,7-MX_TIM8_Init-TIM8-false-HAL-true RCC.ADCFreqValue=36000000 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 @@ -159,22 +159,22 @@ RCC.USBFreq_Value=72000000 RCC.VCOOutput2Freq_Value=8000000 SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1 SH.S_TIM8_CH1.ConfNb=1 -SH.S_TIM8_CH2.0=TIM8_CH2,Output Compare2 CH2 +SH.S_TIM8_CH2.0=TIM8_CH2,PWM Generation2 CH2 SH.S_TIM8_CH2.ConfNb=1 -SH.S_TIM8_CH3.0=TIM8_CH3,Output Compare3 CH3 +SH.S_TIM8_CH3.0=TIM8_CH3,PWM Generation3 CH3 SH.S_TIM8_CH3.ConfNb=1 -SH.S_TIM8_CH4.0=TIM8_CH4,Output Compare4 CH4 +SH.S_TIM8_CH4.0=TIM8_CH4,PWM Generation4 CH4 SH.S_TIM8_CH4.ConfNb=1 TIM7.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM7.IPParameters=AutoReloadPreload,Prescaler,Period -TIM7.Period=100 +TIM7.Period=99 TIM7.Prescaler=71 TIM8.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE -TIM8.Channel-Output\ Compare2\ CH2=TIM_CHANNEL_2 -TIM8.Channel-Output\ Compare3\ CH3=TIM_CHANNEL_3 -TIM8.Channel-Output\ Compare4\ CH4=TIM_CHANNEL_4 TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 -TIM8.IPParameters=Channel-PWM Generation1 CH1,Channel-Output Compare2 CH2,Channel-Output Compare3 CH3,Channel-Output Compare4 CH4,AutoReloadPreload,Prescaler +TIM8.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM8.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM8.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 +TIM8.IPParameters=Channel-PWM Generation1 CH1,AutoReloadPreload,Prescaler,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4 TIM8.Prescaler=71 USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC diff --git a/usrc/light_intensity_ctrl.c b/usrc/light_intensity_ctrl.c index 10a6895..655ca3f 100644 --- a/usrc/light_intensity_ctrl.c +++ b/usrc/light_intensity_ctrl.c @@ -24,7 +24,10 @@ void LightIntensityCtrl_start() { // ÉèÖÃÆµÂÊ uint32_t timClkFreq = chip_get_timer_clock_sorce_freq(m_htim); - ZASSERT(chip_calculate_prescaler_and_autoreload_by_expect_freq(timClkFreq, m_freq, &prescaler, &autoreload)); + ZASSERT(timClkFreq = 72000000); + prescaler = 71; + autoreload = 999; + // ZASSERT(chip_calculate_prescaler_and_autoreload_by_expect_freq(timClkFreq, m_freq, &prescaler, &autoreload)); // m_htim-> HAL_TIM_PWM_Stop(m_htim, TIM_CHANNEL_1); @@ -38,7 +41,7 @@ void LightIntensityCtrl_start() { // ÅäÖÃģʽ TIM_OC_InitTypeDef sConfigOC = {0}; sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = m_light_intensity / 100.0 * __HAL_TIM_GET_AUTORELOAD(m_htim); + sConfigOC.Pulse = m_light_intensity / 100.0 * (__HAL_TIM_GET_AUTORELOAD(m_htim) + 1); sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; diff --git a/usrc/pluse_generator.c b/usrc/pluse_generator.c index 1ef1b99..54f49aa 100644 --- a/usrc/pluse_generator.c +++ b/usrc/pluse_generator.c @@ -4,10 +4,10 @@ extern TIM_HandleTypeDef PLUSE_CTRL_TIMER; -static zgpio_t trigger_io; -static zgpio_t ch_io[4]; -static zgpio_t chx_io; -static uint32_t m_cnt; +static zgpio_t trigger_io; +static zgpio_t ch_io[4]; +static zgpio_t chx_io; +static int32_t m_cnt; static uint32_t m_pluse_width_cnt; static uint32_t m_pluse_interval_cnt; @@ -24,10 +24,12 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == trigger_io.pinoff) { // Æô¶¯¶¨Ê±Æ÷£¬Í¬Ê±´¥·¢µÚÒ»¸ö²¨ÐÎ - m_cnt = 0; - m_pluse_state = 0; - m_pluse_num = 0; + // ÕâÀïÖ®ËùÒÔÉèÖóÉ-1£¬ÊÇÒòΪ²»ÖªµÀɶÔÒò£¬µÚÒ»¸öÂö³å»áÉÙÒ»¸ö¶¨Ê±Æ÷ÖÜÆÚ + m_cnt = -1; + m_pluse_state = 1; + m_pluse_num = 0; + __HAL_TIM_SET_COUNTER(&PLUSE_CTRL_TIMER, 1); HAL_TIM_Base_Start_IT(&PLUSE_CTRL_TIMER); set_io_state(0, true); } @@ -90,7 +92,7 @@ void PluseGenerator_init() { zgpio_init_as_output(&ch_io[2], PLUSE_OUTPUT_CH2, kxs_gpio_nopull, false, false); zgpio_init_as_output(&ch_io[3], PLUSE_OUTPUT_CH3, kxs_gpio_nopull, false, false); zgpio_init_as_output(&chx_io, PLUSE_OUTPUT_CHX, kxs_gpio_nopull, false, false); - zgpio_init_as_input(&trigger_io, PLUSE_TRIGGER, kxs_gpio_nopull, kxs_gpio_rising_irq, false); + zgpio_init_as_input(&trigger_io, PLUSE_TRIGGER, kxs_gpio_pulldown, kxs_gpio_rising_irq, false); } void PluseGenerator_updatePraram() { diff --git a/usrc/project_configs.h b/usrc/project_configs.h index 5d7bc61..ce01d26 100644 --- a/usrc/project_configs.h +++ b/usrc/project_configs.h @@ -20,7 +20,7 @@ #define PLUSE_CTRL_TIMER htim7 -#define PLUSE_TRIGGER PA7 +#define PLUSE_TRIGGER PA0 #define PLUSE_OUTPUT_CH0 PA1 #define PLUSE_OUTPUT_CH1 PA2 #define PLUSE_OUTPUT_CH2 PA3 diff --git a/usrc/umain.c b/usrc/umain.c index 7c524df..435aab1 100644 --- a/usrc/umain.c +++ b/usrc/umain.c @@ -73,6 +73,7 @@ void prv_process_uart_rx_data() { return; } cfg->light_intensity = val; + LightIntensityCtrl_updatePraram(); printf("OK\n"); } else if (strcmp(param, "pulse_width_ms") == 0) { if (val <= 0 || val > 100) { @@ -80,7 +81,7 @@ void prv_process_uart_rx_data() { return; } cfg->pulse_width_ms = val; - LightIntensityCtrl_updatePraram(); + PluseGenerator_updatePraram(); printf("OK\n"); } else if (strcmp(param, "pulse_interval_ms") == 0) { if (val > 100) { @@ -88,8 +89,7 @@ void prv_process_uart_rx_data() { return; } cfg->pulse_interval_ms = val; - LightIntensityCtrl_updatePraram(); - + PluseGenerator_updatePraram(); printf("OK\n"); } else if (strcmp(param, "cmd_echo") == 0) { if (val != 0 && val != 1) { diff --git a/zlib/ztim.c b/zlib/ztim.c index 616c333..2798724 100644 --- a/zlib/ztim.c +++ b/zlib/ztim.c @@ -1,4 +1,5 @@ #include "ztim.h" + #include "zlog.h" static float zfeq(float val0, float val1, float eps) { float dv = val0 - val1; @@ -6,8 +7,7 @@ static float zfeq(float val0, float val1, float eps) { if (dv < eps) return true; return false; } - - bool chip_calculate_prescaler_and_autoreload_by_expect_freq(uint32_t timerInClk, float infreqhz, uint32_t* prescaler, uint32_t* autoreload) { +bool chip_calculate_prescaler_and_autoreload_by_expect_freq(uint32_t timerInClk, float infreqhz, uint32_t* prescaler, uint32_t* autoreload) { /** * @brief ¼ÆËã¼Ä´æÆ÷ÊýÖµ */ @@ -27,8 +27,8 @@ static float zfeq(float val0, float val1, float eps) { if (arr <= 3) return false; // ¶¨Ê±Æ÷Ò»ÖÜÆÚµÄ·Ö±æÂÊ̫СÁË arr = psc_x_arr / psc; - //int psc_x_arr_real = arr * psc; - //float realfreq = timerInClk / psc_x_arr_real; + // int psc_x_arr_real = arr * psc; + // float realfreq = timerInClk / psc_x_arr_real; arr = arr - 1; psc = psc - 1;