#include "./BSP/ADS1278/ADS1278.h" void ADS1278_Init(void){ GPIO_InitTypeDef GPIO_InitStruct; ADS1278_DRDY_GPIO_CLK_ENABLE(); /*DRDY引脚时钟使能*/ ADS1278_FORMAT_GPIO_CLK_ENABLE(); /*FORMAT引脚时钟使能*/ ADS1278_SYNC_GPIO_CLK_ENABLE(); /*SYNC引脚时钟使能*/ /*DRDY引脚设置为下降沿中断*/ GPIO_InitStruct.Pin = ADS1278_DRDY_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(ADS1278_DRDY_GPIO_Port, &GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 1); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); /*FORMAT设置为高电平输出*/ GPIO_InitStruct.Pin = ADS1278_FORMAT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(ADS1278_FORMAT_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_WritePin(ADS1278_FORMAT_GPIO_Port, ADS1278_FORMAT_Pin, GPIO_PIN_SET); /*SYNC设置为普通输出,初始为高电平*/ GPIO_InitStruct.Pin = ADS1278_SYNC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(ADS1278_SYNC_GPIO_Port, &GPIO_InitStruct); HAL_GPIO_WritePin(ADS1278_SYNC_GPIO_Port, ADS1278_SYNC_Pin, GPIO_PIN_SET); } void ADS1278_Reset(void){ /*SYNC拉低至少1个CLK周期*/ HAL_GPIO_WritePin(ADS1278_SYNC_GPIO_Port, ADS1278_SYNC_Pin, GPIO_PIN_RESET); delay_ms(1); HAL_GPIO_WritePin(ADS1278_SYNC_GPIO_Port, ADS1278_SYNC_Pin, GPIO_PIN_SET); } uint8_t DataBuffer[300]; int num = 0; void ADS1278_Read_Data(void){ uint8_t ReceiveDataArrary[24]; /*接收数据数组*/ HAL_SPI_Receive(&g_spi1_handler, ReceiveDataArrary, 24, 1000); /*接收数据*/ DataBuffer[num+0]= ReceiveDataArrary[21]; DataBuffer[num+1]= ReceiveDataArrary[22]; DataBuffer[num+2]= ReceiveDataArrary[23]; num += 3; if(num >= 240){ /* 暂停采集 */ HAL_GPIO_WritePin(ADS1278_SYNC_GPIO_Port, ADS1278_SYNC_Pin, GPIO_PIN_RESET); printf("\r\n开始\r\n"); for(int i=0; i<240;i++){ printf("%d\r\n",DataBuffer[i]); } printf("\r\n结束\r\n"); /* 继续采集 */ HAL_GPIO_WritePin(ADS1278_SYNC_GPIO_Port, ADS1278_SYNC_Pin, GPIO_PIN_SET); num = 0; } } uint8_t SYNC_Flag = 0; /*DRDY下降沿中断函数*/ void EXTI15_10_IRQHandler(void) { if(__HAL_GPIO_EXTI_GET_IT(ADS1278_DRDY_Pin) != RESET) { //清除中断标志位 __HAL_GPIO_EXTI_CLEAR_IT(ADS1278_DRDY_Pin); if(SYNC_Flag == 0){ /* 上电第一次出现数据,复位ADS1278,重新计数 */ ADS1278_Reset(); SYNC_Flag = 1; } else{ /* 开始接收数据 */ ADS1278_Read_Data(); } } }