Browse Source

v1.0

master
zhaohe 2 years ago
parent
commit
6916c3a38e
  1. 24
      README.md
  2. 2
      app/Core/Inc/stm32f1xx_it.h
  3. 12
      app/Core/Src/spi.c
  4. 30
      app/Core/Src/stm32f1xx_it.c
  5. 2
      app/MDK-ARM/startup_stm32f103xb.s
  6. 2
      app/app.ioc
  7. 2
      dep/libiflytop_micro
  8. 37
      src/umain.cpp

24
README.md

@ -1,22 +1,16 @@
```
ADC采样问题:
96K采样率 ---> 10us采样一帧数据
SPI通信BYTE与YTE之间的间隙至少2.5us,一帧数据就是10us,这还不考虑SPI通信本身消耗的时间
```
V1.0
ADCSampleRate 24k
ADCbit 24bit
SPIRate 2M
```
采样一帧数据需要5Byte数据量
->2M 50K
->4M 100K
->8M 200K
计算器
96K
```
ADC采样问题:
10us->采样一帧
1000000 /8 /40 = 25k
2M 50K
4M 100K
8M 200K
1. ADC芯片和MCU之间总线速率无法大于2M, 否则ADC芯片初始时,会报CRC错误
```

2
app/Core/Inc/stm32f1xx_it.h

@ -64,6 +64,8 @@ void USB_LP_CAN1_RX0_IRQHandler(void);
void CAN1_RX1_IRQHandler(void);
void CAN1_SCE_IRQHandler(void);
void TIM2_IRQHandler(void);
void SPI1_IRQHandler(void);
void SPI2_IRQHandler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */

12
app/Core/Src/spi.c

@ -156,6 +156,9 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
__HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);
/* SPI1 interrupt Init */
HAL_NVIC_SetPriority(SPI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(SPI1_IRQn);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
@ -217,6 +220,9 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
__HAL_LINKDMA(spiHandle,hdmarx,hdma_spi2_rx);
/* SPI2 interrupt Init */
HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(SPI2_IRQn);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
@ -244,6 +250,9 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
/* SPI1 DMA DeInit */
HAL_DMA_DeInit(spiHandle->hdmarx);
HAL_DMA_DeInit(spiHandle->hdmatx);
/* SPI1 interrupt Deinit */
HAL_NVIC_DisableIRQ(SPI1_IRQn);
/* USER CODE BEGIN SPI1_MspDeInit 1 */
/* USER CODE END SPI1_MspDeInit 1 */
@ -266,6 +275,9 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
/* SPI2 DMA DeInit */
HAL_DMA_DeInit(spiHandle->hdmatx);
HAL_DMA_DeInit(spiHandle->hdmarx);
/* SPI2 interrupt Deinit */
HAL_NVIC_DisableIRQ(SPI2_IRQn);
/* USER CODE BEGIN SPI2_MspDeInit 1 */
/* USER CODE END SPI2_MspDeInit 1 */

30
app/Core/Src/stm32f1xx_it.c

@ -60,6 +60,8 @@ extern DMA_HandleTypeDef hdma_spi1_rx;
extern DMA_HandleTypeDef hdma_spi1_tx;
extern DMA_HandleTypeDef hdma_spi2_tx;
extern DMA_HandleTypeDef hdma_spi2_rx;
extern SPI_HandleTypeDef hspi1;
extern SPI_HandleTypeDef hspi2;
extern TIM_HandleTypeDef htim2;
/* USER CODE BEGIN EV */
@ -329,6 +331,34 @@ void TIM2_IRQHandler(void)
/* USER CODE END TIM2_IRQn 1 */
}
/**
* @brief This function handles SPI1 global interrupt.
*/
void SPI1_IRQHandler(void)
{
/* USER CODE BEGIN SPI1_IRQn 0 */
/* USER CODE END SPI1_IRQn 0 */
HAL_SPI_IRQHandler(&hspi1);
/* USER CODE BEGIN SPI1_IRQn 1 */
/* USER CODE END SPI1_IRQn 1 */
}
/**
* @brief This function handles SPI2 global interrupt.
*/
void SPI2_IRQHandler(void)
{
/* USER CODE BEGIN SPI2_IRQn 0 */
/* USER CODE END SPI2_IRQn 0 */
HAL_SPI_IRQHandler(&hspi2);
/* USER CODE BEGIN SPI2_IRQn 1 */
/* USER CODE END SPI2_IRQn 1 */
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

2
app/MDK-ARM/startup_stm32f103xb.s

@ -40,7 +40,7 @@ __initial_sp
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x2000
Heap_Size EQU 0x2A00
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base

2
app/app.ioc

@ -122,6 +122,8 @@ NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SPI1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.SPI2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
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

2
dep/libiflytop_micro

@ -1 +1 @@
Subproject commit 586139d8aa82da8d71663836d31df2bb56a577cc
Subproject commit 292e3521d70c7daecfeeef31027b0105e4bf9fe5

37
src/umain.cpp

@ -61,31 +61,45 @@ void Main::generateScheduleTicket() {
}
}
void Main::adcslaveinit() {}
void Main::adcslaveinit() {}
// #pragma GCC push_options
// #pragma GCC optimize("Ofast")
void Main::onTimerCallbackIRQ(STM32_TIM *tim) {
void Main::onTimerCallbackIRQ(STM32_TIM *tim) {
int32_t voice = m_ad77681.triggerOnceAdcReadAndReadLastResult();
m_voiceCacheQueue.push(&voice);
}
#define PACKET_SIZE 1000
static int32_t voicebuf[PACKET_SIZE + 1];
void Main::STM32_GPIO_onIRQ(STM32_GPIO *GPIO_Pin, STM32_GPIO::IrqTypeEvent_t irqevent) {
if (GPIO_Pin == &SPI_SLAVE_GPIO) {
// SPI SLAVE 片选信号触发
static int32_t voicebuf[100 + 1];
/**
* @brief
*
* SPI传输后之后SPI的发送BUF中依然会留有一个数据
*
* SPI模块
*
*/
HAL_SPI_DMAStop(&SLAVE_SPI);
HAL_SPI_Abort(&SLAVE_SPI);
HAL_SPI_DeInit(&SLAVE_SPI);
__HAL_RCC_SPI1_FORCE_RESET();
__HAL_RCC_SPI1_RELEASE_RESET();
MX_SPI1_Init();
memset(voicebuf, 0, sizeof(voicebuf));
if (m_voiceCacheQueue.numElements() < 100) {
if (m_voiceCacheQueue.numElements() < PACKET_SIZE ) {
/**
* @brief
*/
HAL_SPI_Transmit_DMA(&SLAVE_SPI, (uint8_t *)voicebuf, 101 * sizeof(int32_t));
HAL_SPI_Transmit_DMA(&SLAVE_SPI, (uint8_t *)voicebuf, (1) * sizeof(int32_t));
} else {
voicebuf[0] = 100;
for (int i = 0; i < 100; i++) {
voicebuf[0] = PACKET_SIZE * 4;
for (int i = 0; i < PACKET_SIZE; i++) {
m_voiceCacheQueue.pop(&voicebuf[i + 1]);
}
HAL_SPI_Transmit_DMA(&SLAVE_SPI, (uint8_t *)voicebuf, 101 * sizeof(int32_t));
HAL_SPI_Transmit_DMA(&SLAVE_SPI, (uint8_t *)voicebuf, (PACKET_SIZE + 1) * 4);
}
}
}
@ -101,11 +115,11 @@ void Main::main(int argc, char const *argv[]) {
{
// 初始化语音队列
m_voiceCacheQueue.initialize(1000);
m_voiceCacheQueue.initialize(2100);
// 初始化ad77681 传感器
PB12.initAsOutput(true);
HAL_Delay(1000);
HAL_Delay(1500);
m_ad77681.initialize("ad77681", &m_hardware, &hspi2, &PB12, ADC_default_init_param);
m_ad77681.startAdcDmaRead();
@ -156,7 +170,6 @@ void Main::main(int argc, char const *argv[]) {
if (m_ticket % 3000 == 0) {
m_hardware.input_sensors_table_dump(0);
}
HAL_IWDG_Refresh(&hiwdg);
}
}
Loading…
Cancel
Save