OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13391|回复: 6

STM32F405串口问题,使用官方库函数

[复制链接]

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-4-1
在线时间
9 小时
发表于 2015-4-1 17:45:25 | 显示全部楼层 |阅读模式
5金钱

串口配置正常
关键代码如下:
/* UART1配置如下:
      - 字长 = 8 比特
      - 停止位 = 1 比特
      - 校验 = 无
      - 波特率 = 115200 
      - 硬件流控制禁止 (RTS和CTS 信号) */
  huart1.Instance        = USART1;
  huart1.Init.BaudRate   = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits   = UART_STOPBITS_1;
  huart1.Init.Parity     = UART_PARITY_NONE;
  huart1.Init.HwFlowCtl  = UART_HWCONTROL_NONE;
  huart1.Init.Mode       = UART_MODE_TX_RX;
  
  if(HAL_UART_Init(&huart1) != HAL_OK)
  {
    Error_Handler();
  }
if(HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 2048) != HAL_OK)
  {
    Error_Handler();
  }
Uart1RxReady = RESET;
while(1)
{
/*****************************配置信息解析****************************************/
/*串口1以中断的方式循环接收信息,缓冲尺寸根据实际情况进行设置*/
    if( Uart1RxReady == SET)
   {
      //huart1.State = HAL_UART_STATE_READY;
        if(HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 2048) != HAL_OK)//采用中断接收,接收缓存为2048个字节
        {
            Error_Handler();
         }
         Uart1RxReady = RESET;
    }
    /* 串口1边接收边解析*/
   if(Index != huart1.RxXferSize - huart1.RxXferCount  ) //已接收字节数与已解析字节数不相等,则进行解析
   {
         //  if(HAL_UART_Transmit(&huart1,&aRxBuffer[ Index ], 1,200) != HAL_OK)//自收发,非中断方式发送用于测试
         //{
         //   Error_Handler();
         //}
         if(HAL_UART_Transmit_IT(&huart1,&aRxBuffer[ Index ], 1) != HAL_OK)//自收发,中断方式发送用于测试
           {
                Error_Handler();
           }

        /*
           其他代码等等。。
        */
         if(++Index == huart1.RxXferSize)//解析完缓冲区的最后一个字节,重新回到缓冲区起始位置进行解析
         {
           Index = 0;
          }
   }
}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle)
{
  /* Set transmission flag: trasfer complete*/
if( UartHandle == &huart1)
  {
Uart1TxReady = SET;
}

}
/**
  * @brief  Rx Transfer completed callback
  * @param  UartHandle: UART handle
  * @note   This example shows a simple way to report end of DMA Rx transfer, and 
  *         you can add your own implementation.
  * @retval None
  */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
  /* Set transmission flag: trasfer complete*/
if( UartHandle == &huart1)
  {
    Uart1RxReady = SET;
}
}

问题是这样的:首先,接收是绝对没问题的,但是接收一个发送一个的时候,使用中断方式发送就是不行,可能发一两个字符还可以,发多了后面的就不发了,发送代码用红颜色标记了出来。蓝色的代码是使用非中断方式发送的,可以,但是不适合我的程序。
我的疑问是,是不是接收采用中断方式,发送就不能采用中断方式?而且串口一旦出问题,怎么复位串口都不好使,如非系统复位。串口的问题整得我头都大了,望各位高手牛人能指点一二啊。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-4-1 23:25:35 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

79

主题

534

帖子

0

精华

高级会员

Rank: 4

积分
756
金钱
756
注册时间
2014-9-30
在线时间
128 小时
发表于 2015-4-2 16:58:18 | 显示全部楼层
 

楼主 可有  【HAL 库】 各个 ‘外设’ 的 完整 例程 ??

或者 【HAL 库】 的 ‘使用说明书’ ?? 希望是 有指导意义的 说明书。

回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-4-1
在线时间
9 小时
 楼主| 发表于 2015-4-3 09:33:58 | 显示全部楼层
回复【3楼】caosix:
---------------------------------
有啊,但例程都比较简单,我也是基于例程改的。
回复

使用道具 举报

79

主题

534

帖子

0

精华

高级会员

Rank: 4

积分
756
金钱
756
注册时间
2014-9-30
在线时间
128 小时
发表于 2015-4-3 10:11:52 | 显示全部楼层
回复【4楼】13327286788:
---------------------------------
请问:你是否可以 把 例程 的 【原始 文件名字】 发上来 啊。?。

若是 rar 压缩包 小于 5兆字节 ,直接 发上来 就 更 感谢了。。。
回复

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-4-1
在线时间
9 小时
 楼主| 发表于 2015-4-3 12:33:48 | 显示全部楼层
回复【5楼】caosix:
------------------------------
可以到STM官方下载,里面自带例程呢
回复

使用道具 举报

79

主题

534

帖子

0

精华

高级会员

Rank: 4

积分
756
金钱
756
注册时间
2014-9-30
在线时间
128 小时
发表于 2015-4-4 13:50:01 | 显示全部楼层
回复【6楼】13327286788:
---------------------------------
谢谢,,,已经都 下载了 一些 库中 自带的 例程 ==> 毫无 指导意义。。

所以:::才来 请你 推荐。。。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 12:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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