请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 346|回复: 5
收起左侧

[STM32CubeF4] STM32F407ZGT6,AD转换时无法接受数据

[复制链接]

5

主题

11

回帖

26

积分

新手上路

积分
26
发表于 2023-5-18 14:30:43 | 显示全部楼层 |阅读模式
我用cubeMX写STM32F407ZGT6,想通过串口转蓝牙(串口3)控制单片机采集发送数据,同时上位机处理完的数据发给下位机。
但是此时下位机的串口3,接收到的数据不正常(有时对,有时完全收不到,有时只能接受到一部分)。

我重新建了一个程序后发现,加上AD采集后,就会出现上述的问题。求求各位大佬解答
图中是中断优先级的配置
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105917
QQ
发表于 2023-5-18 14:48:38 | 显示全部楼层
做个回环测试,最快速度的回环测试,看看你的这个环境能正常运行不。
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2023-5-18 14:53:31 | 显示全部楼层
eric2013 发表于 2023-5-18 14:48
做个回环测试,最快速度的回环测试,看看你的这个环境能正常运行不。

直接收发没问题,但是加了单片机的AD,串口就没法收数据了,但发数据不受影响
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105917
QQ
发表于 2023-5-18 17:07:16 | 显示全部楼层
濛Johnny 发表于 2023-5-18 14:53
直接收发没问题,但是加了单片机的AD,串口就没法收数据了,但发数据不受影响

收发测试是批量测试不,比如最快速度测试10MB的数据量。

如果没问题了,再逐步开启新外设功能。还是不行的话,得需要你贴下代码了
回复

使用道具 举报

5

主题

11

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2023-5-18 18:48:03 | 显示全部楼层
eric2013 发表于 2023-5-18 17:07
收发测试是批量测试不,比如最快速度测试10MB的数据量。

如果没问题了,再逐步开启新外设功能。还是不 ...

       主程序就这样,您有时间的话帮忙看一下,谢谢
      __IO float AD8232_Volt;
        uint32_t AdcValue1;
        uint8_t rx_buffer[20];
        uint8_t rx_Data[6]="A1234B";       
        uint8_t All_Buffer[20]="AA1.45670.012345C0BB";
       
        uint8_t ECG_widcnt = 0;
       
        uint32_t Re_cnt = 0;
        float ECG_4Wid[4] = {0};
       
        _Bool StartOpenFlag = 0;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
float Moving_Mean(float* Data);
/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_USART3_UART_Init();
  MX_TIM3_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */




               
                        if(__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE)!=RESET && StartOpenFlag ==0)
                        {
                                HAL_UART_Receive_IT(&huart3,rx_buffer,20);
                               
                        }

                        if(__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE)!=RESET && StartOpenFlag ==1)
                        {

                                HAL_UART_Receive_IT(&huart3,rx_Data,6);

                        }
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Configure the main internal regulator output voltage
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 4;
  RCC_OscInitStruct.PLL.PLLN = 100;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        Re_cnt ++;
        if (huart == &huart3)
        {
                if(rx_buffer[0]=='A'&&rx_buffer[1]=='A'&&rx_buffer[0]!='B')
                {
                        StartOpenFlag = 1;
                        HAL_TIM_Base_Start_IT(&htim3); //采样频率

                }

                        HAL_UART_Transmit(&huart1,(uint8_t *)rx_Data,6,0xffff);
       

        }

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if(htim==&htim3)
        {
                HAL_ADC_Start_DMA(&hadc1,&AdcValue1,1);//开启ADC终端转换
               
                AD8232_Volt = AdcValue1*3.3/4096;//心电采集的电压值
                sprintf(&All_Buffer[2], "%.4f", AD8232_Volt);
                sprintf(&All_Buffer[8], "%.6f", AD8232_Volt);
                All_Buffer[16] = 'C';
                HAL_UART_Transmit(&huart3,(uint8_t *)All_Buffer,20,0xffff);
               
                HAL_ADC_Stop_DMA(&hadc1);
        }
       
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105917
QQ
发表于 2023-5-19 10:51:19 | 显示全部楼层
濛Johnny 发表于 2023-5-18 18:48
主程序就这样,您有时间的话帮忙看一下,谢谢
      __IO float AD8232_Volt;
        uint32_t  ...

while大循环里面设计不合理。

如果你已经开启了中断,HAL库的中断里面会处理标志 UART_FLAG_RXNE

你的主程序仅仅是判断你的StartOpenFlag即可,另外你的帖的程序里面仅看到StartOpenFlag设置为1,没看到复位为0.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 02:23 , Processed in 0.272815 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表