Browse Source

OK

ctrl_sig_generator_by_stm32
zhaohe 1 year ago
parent
commit
416ee0a78c
  1. 4
      .cproject
  2. 3
      .settings/com.st.stm32cube.ide.mcu.sfr.prefs
  3. BIN
      ATK-DNM144Z-M3 APM32E103版 V1.0.pdf
  4. 13
      Core/Src/main.c
  5. 2
      README.md
  6. 18
      light_src_ctrl_stm32_port.ioc
  7. 7
      usrc/light_intensity_ctrl.c
  8. 18
      usrc/pluse_generator.c
  9. 2
      usrc/project_configs.h
  10. 6
      usrc/umain.c
  11. 8
      zlib/ztim.c

4
.cproject

@ -40,8 +40,8 @@
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.779367306" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1847142937" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.4539504" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1999440254" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.og" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.4539504" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1999440254" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.ofast" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1824133732" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>

3
.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

BIN
ATK-DNM144Z-M3 APM32E103版 V1.0.pdf

13
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();
}

2
README.md

@ -15,7 +15,7 @@ STM32
TIM8_CH4:PA9
渴흙껫삿多신:
PA7
PA0
渴놔多신:
CH1:PA1
CH2:PA2

18
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

7
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;

18
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() {

2
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

6
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) {

8
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;

Loading…
Cancel
Save