diff --git a/README.md b/README.md index 5bd2b04..25d362f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,22 @@ ``` -资源使用说明: -默认硬件接口---调试串口 USART2(PA2,PA3) -默认硬件接口---毫秒定时器 tim4 -默认硬件接口---调试指示灯 PA1 +ADC采样问题: -版本说明: - V1.0:初始化工程,配置好调试串口,调试指示灯,毫秒定时器,引入libiflytop_micro +96K采样率 ---> 10us采样一帧数据 +SPI通信BYTE与YTE之间的间隙至少2.5us,一帧数据就是10us,这还不考虑SPI通信本身消耗的时间 + +采样一帧数据需要5Byte数据量 +->2M 50K +->4M 100K +->8M 200K + +计算器 +96K + +10us->采样一帧 +1000000 /8 /40 = 25k +2M 50K +4M 100K +8M 200K ``` \ No newline at end of file diff --git a/app/Core/Inc/stm32f1xx_it.h b/app/Core/Inc/stm32f1xx_it.h index 4d2b3a9..eb58f6a 100644 --- a/app/Core/Inc/stm32f1xx_it.h +++ b/app/Core/Inc/stm32f1xx_it.h @@ -61,6 +61,7 @@ void USB_HP_CAN1_TX_IRQHandler(void); void USB_LP_CAN1_RX0_IRQHandler(void); void CAN1_RX1_IRQHandler(void); void CAN1_SCE_IRQHandler(void); +void TIM2_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ diff --git a/app/Core/Inc/tim.h b/app/Core/Inc/tim.h index 155c0b5..d7a10d8 100644 --- a/app/Core/Inc/tim.h +++ b/app/Core/Inc/tim.h @@ -32,12 +32,15 @@ extern "C" { /* USER CODE END Includes */ +extern TIM_HandleTypeDef htim2; + extern TIM_HandleTypeDef htim4; /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ +void MX_TIM2_Init(void); void MX_TIM4_Init(void); /* USER CODE BEGIN Prototypes */ diff --git a/app/Core/Src/gpio.c b/app/Core/Src/gpio.c index 84cca46..8b17d69 100644 --- a/app/Core/Src/gpio.c +++ b/app/Core/Src/gpio.c @@ -52,16 +52,11 @@ void MX_GPIO_Init(void) __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); - /*Configure GPIO pins : PC13 PC14 PC15 */ - GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; + /*Configure GPIO pin : PC13 */ + GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pins : PD0 PD1 */ - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - /*Configure GPIO pins : PA0 PA1 PA4 PA8 PA9 PA10 PA15 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_8 @@ -78,9 +73,6 @@ void MX_GPIO_Init(void) GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure peripheral I/O remapping */ - __HAL_AFIO_REMAP_PD01_ENABLE(); - } /* USER CODE BEGIN 2 */ diff --git a/app/Core/Src/main.c b/app/Core/Src/main.c index abffb7b..6935092 100644 --- a/app/Core/Src/main.c +++ b/app/Core/Src/main.c @@ -91,7 +91,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); - MX_IWDG_Init(); + // MX_IWDG_Init(); MX_USART2_UART_Init(); MX_TIM4_Init(); MX_CAN_Init(); @@ -99,6 +99,7 @@ int main(void) MX_USART1_UART_Init(); MX_USART3_UART_Init(); MX_SPI2_Init(); + MX_TIM2_Init(); /* USER CODE BEGIN 2 */ umain(0, NULL); @@ -127,13 +128,14 @@ void SystemClock_Config(void) /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; + RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; - RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); diff --git a/app/Core/Src/spi.c b/app/Core/Src/spi.c index ddb977c..9b28fd3 100644 --- a/app/Core/Src/spi.c +++ b/app/Core/Src/spi.c @@ -47,7 +47,7 @@ void MX_SPI1_Init(void) hspi1.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi1.Init.CLKPhase = SPI_PHASE_2EDGE; hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32; hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi1.Init.TIMode = SPI_TIMODE_DISABLE; hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; @@ -79,7 +79,7 @@ void MX_SPI2_Init(void) hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH; hspi2.Init.CLKPhase = SPI_PHASE_2EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; - hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; + hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; diff --git a/app/Core/Src/stm32f1xx_it.c b/app/Core/Src/stm32f1xx_it.c index 47d6541..ddf0499 100644 --- a/app/Core/Src/stm32f1xx_it.c +++ b/app/Core/Src/stm32f1xx_it.c @@ -58,6 +58,7 @@ extern CAN_HandleTypeDef hcan; extern DMA_HandleTypeDef hdma_spi2_tx; extern DMA_HandleTypeDef hdma_spi2_rx; +extern TIM_HandleTypeDef htim2; /* USER CODE BEGIN EV */ /* USER CODE END EV */ @@ -284,6 +285,20 @@ void CAN1_SCE_IRQHandler(void) /* USER CODE END CAN1_SCE_IRQn 1 */ } +/** + * @brief This function handles TIM2 global interrupt. + */ +void TIM2_IRQHandler(void) +{ + /* USER CODE BEGIN TIM2_IRQn 0 */ + + /* USER CODE END TIM2_IRQn 0 */ + HAL_TIM_IRQHandler(&htim2); + /* USER CODE BEGIN TIM2_IRQn 1 */ + + /* USER CODE END TIM2_IRQn 1 */ +} + /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ diff --git a/app/Core/Src/tim.c b/app/Core/Src/tim.c index 04a7b2e..afa43d1 100644 --- a/app/Core/Src/tim.c +++ b/app/Core/Src/tim.c @@ -24,8 +24,49 @@ /* USER CODE END 0 */ +TIM_HandleTypeDef htim2; TIM_HandleTypeDef htim4; +/* TIM2 init function */ +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}; + + /* 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 = 65535; + 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(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM2_Init 2 */ + + /* USER CODE END TIM2_Init 2 */ + +} /* TIM4 init function */ void MX_TIM4_Init(void) { @@ -41,7 +82,7 @@ void MX_TIM4_Init(void) /* USER CODE END TIM4_Init 1 */ htim4.Instance = TIM4; - htim4.Init.Prescaler = 63; + htim4.Init.Prescaler = 71; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.Period = 65535; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; @@ -70,7 +111,22 @@ void MX_TIM4_Init(void) void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) { - if(tim_baseHandle->Instance==TIM4) + if(tim_baseHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspInit 0 */ + + /* USER CODE END TIM2_MspInit 0 */ + /* TIM2 clock enable */ + __HAL_RCC_TIM2_CLK_ENABLE(); + + /* TIM2 interrupt Init */ + HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspInit 1 */ + + /* USER CODE END TIM2_MspInit 1 */ + } + else if(tim_baseHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ @@ -86,7 +142,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle) void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle) { - if(tim_baseHandle->Instance==TIM4) + if(tim_baseHandle->Instance==TIM2) + { + /* USER CODE BEGIN TIM2_MspDeInit 0 */ + + /* USER CODE END TIM2_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM2_CLK_DISABLE(); + + /* TIM2 interrupt Deinit */ + HAL_NVIC_DisableIRQ(TIM2_IRQn); + /* USER CODE BEGIN TIM2_MspDeInit 1 */ + + /* USER CODE END TIM2_MspDeInit 1 */ + } + else if(tim_baseHandle->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspDeInit 0 */ diff --git a/app/MDK-ARM/startup_stm32f103xb.s b/app/MDK-ARM/startup_stm32f103xb.s index fd82d4f..f13f993 100644 --- a/app/MDK-ARM/startup_stm32f103xb.s +++ b/app/MDK-ARM/startup_stm32f103xb.s @@ -29,7 +29,7 @@ ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; -Stack_Size EQU 0x400 +Stack_Size EQU 0x1000 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size @@ -40,7 +40,7 @@ __initial_sp ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; -Heap_Size EQU 0x200 +Heap_Size EQU 0x2000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base diff --git a/app/app.ioc b/app/app.ioc index 7376ccc..11a4e3f 100644 --- a/app/app.ioc +++ b/app/app.ioc @@ -5,9 +5,9 @@ CAD.provider= CAN.ABOM=ENABLE CAN.BS1=CAN_BS1_12TQ CAN.BS2=CAN_BS2_3TQ -CAN.CalculateBaudRate=500000 -CAN.CalculateTimeBit=2000 -CAN.CalculateTimeQuantum=125.0 +CAN.CalculateBaudRate=562500 +CAN.CalculateTimeBit=1777 +CAN.CalculateTimeQuantum=111.11111111111111 CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,BS1,BS2,SJW,Prescaler,TTCM,ABOM,NART,RFLM CAN.NART=ENABLE CAN.Prescaler=4 @@ -44,39 +44,45 @@ Mcu.CPN=STM32F103C8T6 Mcu.Family=STM32F1 Mcu.IP0=CAN Mcu.IP1=DMA -Mcu.IP10=USART2 -Mcu.IP11=USART3 +Mcu.IP10=USART1 +Mcu.IP11=USART2 +Mcu.IP12=USART3 Mcu.IP2=IWDG Mcu.IP3=NVIC Mcu.IP4=RCC Mcu.IP5=SPI1 Mcu.IP6=SPI2 Mcu.IP7=SYS -Mcu.IP8=TIM4 -Mcu.IP9=USART1 -Mcu.IPNb=12 +Mcu.IP8=TIM2 +Mcu.IP9=TIM4 +Mcu.IPNb=13 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 -Mcu.Pin0=PA2 -Mcu.Pin1=PA3 -Mcu.Pin10=PA11 -Mcu.Pin11=PA12 -Mcu.Pin12=PA13 -Mcu.Pin13=PA14 -Mcu.Pin14=PB6 -Mcu.Pin15=PB7 -Mcu.Pin16=VP_IWDG_VS_IWDG -Mcu.Pin17=VP_SYS_VS_Systick -Mcu.Pin18=VP_TIM4_VS_ClockSourceINT -Mcu.Pin2=PA5 -Mcu.Pin3=PA6 -Mcu.Pin4=PA7 -Mcu.Pin5=PB10 -Mcu.Pin6=PB11 -Mcu.Pin7=PB13 -Mcu.Pin8=PB14 -Mcu.Pin9=PB15 -Mcu.PinsNb=19 +Mcu.Pin0=PC14-OSC32_IN +Mcu.Pin1=PC15-OSC32_OUT +Mcu.Pin10=PB11 +Mcu.Pin11=PB13 +Mcu.Pin12=PB14 +Mcu.Pin13=PB15 +Mcu.Pin14=PA11 +Mcu.Pin15=PA12 +Mcu.Pin16=PA13 +Mcu.Pin17=PA14 +Mcu.Pin18=PB6 +Mcu.Pin19=PB7 +Mcu.Pin2=PD0-OSC_IN +Mcu.Pin20=VP_IWDG_VS_IWDG +Mcu.Pin21=VP_SYS_VS_Systick +Mcu.Pin22=VP_TIM2_VS_ClockSourceINT +Mcu.Pin23=VP_TIM4_VS_ClockSourceINT +Mcu.Pin3=PD1-OSC_OUT +Mcu.Pin4=PA2 +Mcu.Pin5=PA3 +Mcu.Pin6=PA5 +Mcu.Pin7=PA6 +Mcu.Pin8=PA7 +Mcu.Pin9=PB10 +Mcu.PinsNb=24 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx @@ -96,6 +102,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false +NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USB_HP_CAN1_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false @@ -133,6 +140,14 @@ PB6.Signal=USART1_TX PB7.Locked=true PB7.Mode=Asynchronous PB7.Signal=USART1_RX +PC14-OSC32_IN.Mode=LSE-External-Oscillator +PC14-OSC32_IN.Signal=RCC_OSC32_IN +PC15-OSC32_OUT.Mode=LSE-External-Oscillator +PC15-OSC32_OUT.Signal=RCC_OSC32_OUT +PD0-OSC_IN.Mode=HSE-External-Oscillator +PD0-OSC_IN.Signal=RCC_OSC_IN +PD1-OSC_OUT.Mode=HSE-External-Oscillator +PD1-OSC_OUT.Signal=RCC_OSC_OUT PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false @@ -162,46 +177,51 @@ ProjectManager.TargetToolchain=MDK-ARM V5.32 ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false 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_IWDG_Init-IWDG-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_CAN_Init-CAN-false-HAL-true,8-MX_SPI1_Init-SPI1-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_USART3_UART_Init-USART3-false-HAL-true,11-MX_SPI2_Init-SPI2-false-HAL-true -RCC.ADCFreqValue=32000000 -RCC.AHBFreq_Value=64000000 +RCC.ADCFreqValue=36000000 +RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 -RCC.APB1Freq_Value=32000000 -RCC.APB1TimFreq_Value=64000000 -RCC.APB2Freq_Value=64000000 -RCC.APB2TimFreq_Value=64000000 -RCC.FCLKCortexFreq_Value=64000000 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=72000000 +RCC.FCLKCortexFreq_Value=72000000 RCC.FamilyName=M -RCC.HCLKFreq_Value=64000000 -RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value -RCC.MCOFreq_Value=64000000 -RCC.PLLCLKFreq_Value=64000000 -RCC.PLLMCOFreq_Value=32000000 -RCC.PLLMUL=RCC_PLL_MUL16 -RCC.SYSCLKFreq_VALUE=64000000 +RCC.HCLKFreq_Value=72000000 +RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value +RCC.MCOFreq_Value=72000000 +RCC.PLLCLKFreq_Value=72000000 +RCC.PLLMCOFreq_Value=36000000 +RCC.PLLMUL=RCC_PLL_MUL9 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.SYSCLKFreq_VALUE=72000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.TimSysFreq_Value=64000000 -RCC.USBFreq_Value=64000000 -SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_64 +RCC.TimSysFreq_Value=72000000 +RCC.USBFreq_Value=72000000 +RCC.VCOOutput2Freq_Value=8000000 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32 SPI1.CLKPhase=SPI_PHASE_2EDGE SPI1.CLKPolarity=SPI_POLARITY_HIGH -SPI1.CalculateBaudRate=1000.0 KBits/s +SPI1.CalculateBaudRate=2.25 MBits/s SPI1.Direction=SPI_DIRECTION_2LINES SPI1.IPParameters=VirtualType,Mode,Direction,BaudRatePrescaler,CalculateBaudRate,CLKPolarity,CLKPhase SPI1.Mode=SPI_MODE_MASTER SPI1.VirtualType=VM_MASTER -SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_8 +SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 SPI2.CLKPhase=SPI_PHASE_2EDGE SPI2.CLKPolarity=SPI_POLARITY_HIGH -SPI2.CalculateBaudRate=4.0 MBits/s +SPI2.CalculateBaudRate=2.25 MBits/s SPI2.Direction=SPI_DIRECTION_2LINES SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler,CLKPolarity,CLKPhase SPI2.Mode=SPI_MODE_MASTER SPI2.VirtualType=VM_MASTER +TIM2.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE +TIM2.IPParameters=AutoReloadPreload TIM4.IPParameters=Prescaler -TIM4.Prescaler=63 +TIM4.Prescaler=71 USART1.IPParameters=VirtualMode USART1.VirtualMode=VM_ASYNC -USART2.IPParameters=VirtualMode +USART2.BaudRate=1500000 +USART2.IPParameters=VirtualMode,BaudRate USART2.VirtualMode=VM_ASYNC USART3.IPParameters=VirtualMode USART3.VirtualMode=VM_ASYNC @@ -209,6 +229,8 @@ VP_IWDG_VS_IWDG.Mode=IWDG_Activate VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG 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 VP_TIM4_VS_ClockSourceINT.Mode=Internal VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT board=custom diff --git a/dep/libiflytop_micro b/dep/libiflytop_micro index 5341f39..586139d 160000 --- a/dep/libiflytop_micro +++ b/dep/libiflytop_micro @@ -1 +1 @@ -Subproject commit 5341f397ab425fe65386027cc8469eb508825649 +Subproject commit 586139d8aa82da8d71663836d31df2bb56a577cc diff --git a/src/umain.cpp b/src/umain.cpp index 03c3c42..e23bfff 100644 --- a/src/umain.cpp +++ b/src/umain.cpp @@ -28,7 +28,7 @@ struct ad77681_init_param ADC_default_init_param = { // }, /* Configuration */ .power_mode = AD77681_FAST, // power_mode - .mclk_div = AD77681_MCLK_DIV_8, // mclk_div + .mclk_div = AD77681_MCLK_DIV_2, // mclk_div .conv_mode = AD77681_CONV_CONTINUOUS, // conv_mode .diag_mux_sel = AD77681_POSITIVE_FS, // diag_mux_sel .conv_diag_sel = false, // conv_diag_sel @@ -60,6 +60,10 @@ void Main::generateScheduleTicket() { } void Main::adcslaveinit() {} +void Main::onTimerCallbackIRQ(STM32_TIM *tim) { + int32_t voice = m_ad77681.triggerOnceAdcReadAndReadLastResult(); + m_voiceCacheQueue.push(&voice); +} void Main::main(int argc, char const *argv[]) { sys_loggger_enable(true); @@ -69,9 +73,30 @@ void Main::main(int argc, char const *argv[]) { m_hardware.input_sensors_init(); m_hardware.output_switch_init(); - PB12.initAsOutput(true); - HAL_Delay(1000); - m_ad77681.initialize("ad77681", &m_hardware, &hspi2, &PB12, ADC_default_init_param); + { + // 初始化语音队列 + m_voiceCacheQueue.initialize(1000); + + // 初始化ad77681 传感器 + PB12.initAsOutput(true); + HAL_Delay(1000); + m_ad77681.initialize("ad77681", &m_hardware, &hspi2, &PB12, ADC_default_init_param); + m_ad77681.startAdcDmaRead(); + + // 初始化音频采集定时器 + STM32_TIM2.initialize(&htim2, STM32_TIM::kTimMode_timer); + STM32_TIM2.regListener(this); + STM32_TIM2.startTimerByFreq(16000); + } + + static int32_t voicebuf[800]; + while (m_voiceCacheQueue.numElements() < 800) { + } + // + m_voiceCacheQueue.popMuti(voicebuf, 800); + for (size_t i = 0; i < 800; i++) { + printf("{plotter}%d\n", voicebuf[i]); + } #if 0 double voltage; @@ -79,11 +104,13 @@ void Main::main(int argc, char const *argv[]) { static int32_t voicebuf[16 * 100]; int off = 0; while (1) { - voicebuf[off++] = m_ad77681.read_adc(); + voicebuf[off++] = m_ad77681.triggerOnceAdcReadAndReadLastResult(); if (off >= 16 * 100) { break; } + m_hardware.sleepus(100); } + for (size_t i = 0; i < off; i++) { printf("{plotter}%d\n", voicebuf[i]); } @@ -98,6 +125,6 @@ void Main::main(int argc, char const *argv[]) { m_hardware.input_sensors_table_dump(0); } - HAL_IWDG_Refresh(&hiwdg); + // HAL_IWDG_Refresh(&hiwdg); } } diff --git a/src/umain.hpp b/src/umain.hpp index 1e6b808..49d07e8 100644 --- a/src/umain.hpp +++ b/src/umain.hpp @@ -19,23 +19,32 @@ #include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp" #endif +#include "libiflytop_micro\stm32\basic\loopqueue.hpp" +#include "libiflytop_micro\stm32\basic\stm32_tim.hpp" #include "libiflytop_micro\stm32\component\analogdevicesinc\ad77881\ad77681_impl.hpp" // namespace iflytop { class __class {}; -class Main : public __class { +class Main : public __class, public STM32_TIM_LISTENER { public: Hardware m_hardware; int32_t m_ticket; // 保证一个数一个数的递增,但不保证时间准确 Ad77681Impl m_ad77681; + LoopQueue m_voiceCacheQueue; + Main() {} void adcslaveinit(); void main(int argc, char const *argv[]); + /******************************************************************************* + * OVERRIDE STM32_TIM_LISTENER * + *******************************************************************************/ + virtual void onTimerCallbackIRQ(STM32_TIM *tim); + private: void generateScheduleTicket(); };