谢谢你抽空帮助我 堵这两天了 STM32F746NGH6 非阻塞接收中断问题 图文都有

2019-07-20 17:21发布

实现功能:通过485通信,接收中断且得出收到数据的长度,阻塞式通信差不多搞定了(原理还不大清楚,自己把函数挨个试验了一遍,之前没用过HAL库函数写过程序,下面列出我的错误代码,请指正)下面两个代码是主函数主要看while(1)部分,和中断函数  

[mw_shl_code=applescript,true]int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

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

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  //开始都是初始的配置  用cube产生的代码
  HAL_Init();

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

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_UART7_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
                        HAL_UART_Receive_IT(&huart7,buf,5);   //这里主要向片子发数据并让他返回   发送5个数据后  间隔打印一个乱码
  while (1)
  {
        while(HAL_UART_GetState(&huart7)==RESET);   //等待发送结束
        HAL_GPIO_WritePin(GPIOE,DE_Pin, GPIO_PIN_SET);  //拉高DI引脚
        HAL_UART_Transmit(&huart7,UART7_RX_BUF,UART7_RX_STA,1000);
                HAL_GPIO_WritePin(GPIOE,DE_Pin, GPIO_PIN_RESET);  
                HAL_Delay(100);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

void UART7_IRQHandler(void) //参考教材上的例程,为了读数据到数组,并记录长度
{
  /* USER CODE BEGIN UART7_IRQn 0 */
       
  /* USER CODE END UART7_IRQn 0 */
        uint8_t Res;
        if((__HAL_UART_GET_FLAG(&huart7,UART_FLAG_RXNE)!=RESET))  //如果接收中断
        {
HAL_GPIO_WritePin(GPIOE,RE_Pin, GPIO_PIN_RESET);  //拉低RO
        HAL_UART_Receive(&huart7,&Res,1,1000);
HAL_GPIO_WritePin(GPIOE,RE_Pin, GPIO_PIN_SET);
                if((UART7_RX_STA&0x8000)==0)//
                {
                        if(UART7_RX_STA&0x4000)//
                        {
                                if(Res!=0x0a)UART7_RX_STA=0;//
                                else UART7_RX_STA|=0x8000;        //
                        }
                        else
                        {       
                                if(Res==0x0d)  UART7_RX_STA|=0x4000;
                                else
                                {
                                        UART7_RX_BUF[UART7_RX_STA&0X3FFF]=Res ;
                                        UART7_RX_STA++;
                                        if(UART7_RX_STA>(200-1))UART7_RX_STA=0;//
                                }                 
                        }
                }                    
        }[/mw_shl_code]

总结:因为刚接触F7,之前经验也很不足,对HAL库函数和中断的函数的理解不到位  再次请帮我指点指点  迷途在这3,4天了,也知道原理很重要,正加油补!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。