你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下单线串口的问题

[复制链接]
一匹夫尔 提问时间:2017-9-25 10:16 /
stm32L0xx是支持单线串口的 但是我无法调试出效果 以下是我的程序 无法接受 无法发送 我是在能进行正常通信的程序下修改的

main中的初始化函数
static void MX_USART2_UART_Init(void)
{

  UartHandle.Instance = USART2;
  UartHandle.Init.BaudRate = 9600;
  UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  UartHandle.Init.StopBits = UART_STOPBITS_1;
  UartHandle.Init.Parity = UART_PARITY_NONE;
  UartHandle.Init.Mode = UART_MODE_TX_RX;
  UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
  UartHandle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  UartHandle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_HalfDuplex_Init(&UartHandle) != HAL_OK)
  {
    Error_Handler();
  }
    if(HAL_HalfDuplex_Init(&UartHandle) != HAL_OK)
    {
        Error_Handler();
    }
    if(HAL_HalfDuplex_Init(&UartHandle) != HAL_OK)
    {
        Error_Handler();
    }
    if(HAL_UART_Receive_IT(&UartHandle,(uint8_t *)&temp,1) != HAL_OK)
    {
        //这一句写在main函数的while(1)上面。用于启动程序启动一次中断接收
        HAL_UART_Transmit_IT(&UartHandle, (uint8_t *)&"ERROR\r\n",7);
        while(1);
    }
}


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)        //done
{
    buff[buff_count]=temp[0];
    buff_count=buff_count+1;
    if(buff_count>=8)
    {
        buff_count = 0;
        arg0 = buff[0];
        arg1 = buff[1];
        arg2 = buff[2];
        arg3 = buff[3];
        arg4 = buff[4];
        arg5 = buff[5];
        arg6 = buff[6];
        arg7 = buff[7];

    }
    memset(temp,0,8);
    HAL_UART_Receive_IT(&UartHandle,(uint8_t *)&temp,1);       //重新打开串口中断
}



stm32l0xx_hal_msp.c中的函数
void HAL_UART_MspInit(UART_HandleTypeDef* huart)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(huart->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspInit 0 */

  /* USER CODE END USART2_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USART2_CLK_ENABLE();

    /**USART2 GPIO Configuration   
    PA2     ------> USART2_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USART2 interrupt Init */
    HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART2_IRQn);
  /* USER CODE BEGIN USART2_MspInit 1 */

  /* USER CODE END USART2_MspInit 1 */
  }

}

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{

  if(huart->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspDeInit 0 */

  /* USER CODE END USART2_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_USART2_CLK_DISABLE();

    /**USART2 GPIO Configuration   
    PA2     ------> USART2_TX
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2);

    /* USART2 interrupt DeInit */
    HAL_NVIC_DisableIRQ(USART2_IRQn);
  /* USER CODE BEGIN USART2_MspDeInit 1 */

  /* USER CODE END USART2_MspDeInit 1 */
  }

}



中断函数
void USARTx_IRQHandler(void)
{
     HAL_UART_IRQHandler(&UartHandle);
}





在控制时使用这两句进行控制
HAL_HalfDuplex_EnableTransmitter(&UartHandle);
               
HAL_HalfDuplex_EnableReceiver(&UartHandle);



麻烦懂得说一下

收藏 评论4 发布时间:2017-9-25 10:16

举报

4个回答
MrJiu 回答时间:2017-9-25 11:13:02
一、上示波器
二、使用HAL直接配置。。。。
三、代码部分,一般没人有心情看
一匹夫尔 回答时间:2017-9-25 11:32:44
MrJiu 发表于 2017-9-25 11:13
一、上示波器
二、使用HAL直接配置。。。。
三、代码部分,一般没人有心情看 ...

已经上了示波器 这部分代码已经是uart的全部代码了 库部分的不用贴上啦 设置是按照hal格式来的
斜阳 回答时间:2017-9-25 13:13:24
没现象,没故障。你是准备让我们猜问题处在哪么?
一匹夫尔 回答时间:2017-9-25 14:22:43
斜阳__ 发表于 2017-9-25 13:13
没现象,没故障。你是准备让我们猜问题处在哪么?

的确没现象 故障就是无法通信 包括收发都是

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版