Browse Source

update

master
zhaohe 2 years ago
parent
commit
87a2977093
  1. 23
      README.md
  2. 1
      app/Core/Inc/stm32f1xx_it.h
  3. 3
      app/Core/Inc/tim.h
  4. 12
      app/Core/Src/gpio.c
  5. 12
      app/Core/Src/main.c
  6. 4
      app/Core/Src/spi.c
  7. 15
      app/Core/Src/stm32f1xx_it.c
  8. 76
      app/Core/Src/tim.c
  9. 4
      app/MDK-ARM/startup_stm32f103xb.s
  10. 122
      app/app.ioc
  11. 2
      dep/libiflytop_micro
  12. 39
      src/umain.cpp
  13. 11
      src/umain.hpp

23
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
```

1
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 */

3
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 */

12
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 */

12
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();

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

15
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 */

76
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 */

4
app/MDK-ARM/startup_stm32f103xb.s

@ -29,7 +29,7 @@
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
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
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x200
Heap_Size EQU 0x2000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base

122
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

2
dep/libiflytop_micro

@ -1 +1 @@
Subproject commit 5341f397ab425fe65386027cc8469eb508825649
Subproject commit 586139d8aa82da8d71663836d31df2bb56a577cc

39
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);
}
}

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

Loading…
Cancel
Save