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

关于HAL下的printf重定向输出

[复制链接]
justsoso110110 提问时间:2016-6-8 20:39 /
(1)网上查了使用printf重定向,串口输出,函数如下,使用HAL_UART_Transmit函数。
int fputc(int ch,FILE *f)
{
    uint8_t temp[1]={ch};
    HAL_UART_Transmit(&UartHandle,temp,1,2);
    return 1;
}

于是有个疑问,调用HAL_UART_Transmit就不用检查状态了吗?不用等待发送结束吗?


(2)在用标准库编程中,重定向函数为
int fputc(int ch,FILE *p)  //函数默认的,在使用printf函数时自动调用
{
        USART_SendData(USART1,(u8)ch);       
        while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
        return ch;

}
是需要检查寄存器状态的,看USART_FLAG_TXE的值的。


(3)在HAL给的官方的例子中,使用HAL_UART_Transmit_IT中断发送是,会设置一个标识位UartReady,在回调函数中会修改该数值,程序中检查是否发送完成。
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
  {
    Error_Handler();
  }
        while (UartReady != SET)      //检查是否发送完成
  {
  }

        UartReady = RESET;



初学HAL,不是太懂,其实对标准库编程也不熟悉。以上三种情况还请各位高手指教!谢谢!



收藏 评论7 发布时间:2016-6-8 20:39

举报

7个回答
wenyangzeng 回答时间:2016-6-9 09:34:33
HAL把基本操作函数留在底层,用户可以专心做顶层操作。
Dylan疾风闪电 回答时间:2016-6-9 10:45:39
HAL 把底层完全封装起来了。
与标准库各有千秋吧。

对于应用的深入研究以及优化来说,标准库更彻底些。可以把HAL当做例程来学习、借鉴

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

yu515301489 回答时间:2016-6-9 12:22:24
我觉得吧,说的过激见谅!
选择HAL库你就不要有这些疑问  知道哪些干嘛的 用就行了!
如果想 稍微 详细了解点那就用标准库咯 ,引脚 时钟分频 配置,使能 开启。
huaiqiao 回答时间:2016-6-9 15:54:42
用微库就好了。
moyanming2013 回答时间:2016-6-12 11:00:34
显然,HAL_UART_Transmit封装了底层,如果要想知道,调试时进入此函数看实现部分。
推荐用这种HAL的方式,其中因素就是方便移植。
回答时间:2016-6-12 16:28:02
HAL_UART_Transmit(&UartHandle,temp,1,2);
在里面有等待,楼主可以考虑把延时加大一些。
Ian-392967 回答时间:2016-7-2 07:21:55
谢谢分享及讨论

所属标签

相似问题

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