【NUCLEO-F446RE试用体验】+7.printf&scanf重定向

  • lygo
  • LV4工程师
  • |      2017-09-13 23:59:21
  • 浏览量 1224
  • 回复:4
本帖最后由 lygo 于 2017-9-14 00:03 编辑 既然定时器学习的差不多了,还有就是输入捕获了。输入捕获就让大家去完成了,在这里我也就不写了,嘿嘿。输入捕获可以测量频率,占空比以及电机编码器的值(脉冲数的值),也比较好玩的。好的,那么就进入正题吧,这次就进入到串口的学习,那么先先学习简单的吧,printf打印数据输出到串口显示,还有利用scanf实现从串口输入数据然后数据又通过printf打印出来。 注意:板载的虚拟串口是usart2(所以下面的配置是针对串口2进行配置的),所以可直接用串口2打印数据,什么是虚拟串口。什么是虚拟串口?虚拟串口也是要靠硬件来实现的,现在市场上有很多协议转换类的产品。比如USB转串口,网口转串口,光纤转串口等设备。通过厂家自带的软件,可以把PC之外的接口虚拟到你的PC上,成为你计算机的一个COM口,你可以把这个串口打开使用,像你PC上的 COM口一样去用。 那么下面就开始配置串口吧: (1)、新建工程就不用说了吧,前面都说的十分清楚地,如果还不清楚话,可以去看前面我的帖子。 (2)、选择串口2且设置为一步通信方式,PA2设置发送引脚,PA3设置为接收引脚。如下图: 3)、时钟配置,选择内部高速时钟(HSI,如下图: 4、串口配置相关参数: 串口配置设置波特率为115200 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1.其他参数默认。如下如图: C语言中的标准库中所用的标准输出函数,默认的输出设备是显示器,要实现串口或LCD的输出,必须重新定义标准库函数里与输出函数相关的函数。例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:重定向是指用户可以自己重写C 的库函数,当连接器检查到用户编写了与C 库函数相同名字的函数时,优先采用用户编写的函数,这样用户就可以实现对库的修改了。为了实现重定向printf()和scanf() 函数,我们需要分别重写fputc()和fgetc() 这两个C 标准库函数代码如下:
int fputc(int ch, FILE *f)

{

  HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);

  return ch;

}

int fgetc(FILE * f)

{

  uint8_t ch = 0;

  HAL_UART_Receive(&huart2,&ch, 1, 0xffff);

  return ch;

}
注意这里用的是轮询的方式,谈到串口这里不得不说串口的三种通信模式: 第一种是上面用到的轮询的模式。CPU不断查询IO设备,如设备有请求则加以处理。例如CPU不断查询串口是否传输完成,如传输超过则返回超时错误。轮询方式会占用CPU处理时间,效率较低。 第二种就是中断控制方式。当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。 第三种就是直接内存存取技术(DMA)方式。所谓直接传送,即在内存与IO设备间传送一个数据块的过程中,不需要CPU的任何中间干涉,只需要CPU在过程开始时向设备发出“传送块数据”的命令,然后通过中断来得知过程是否结束和下次操作是否准备就绪。 5)、编写用户代码: 在uart.c写上上面代码即可,主函数代码如下:
int main(void)

{

    char data;

    HAL_Init();

    SystemClock_Config();

    MX_GPIO_Init();

    MX_USART2_UART_Init();

    printf("云汉lygo....\r\n");

    while (1)

    {

       if(scanf("%s",data) == 1)//表示输入类型与%s相同,其实不要也行

      {

         printf("data:%s\r\n",data);

         break;

      } 

    }
6)、串口打印图 下一篇就是用DMA来接收并处理不定长数据了,好的谢谢大家!!! 本次实验文档如下:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:2
Sourcelink 2017-09-14
666
1   回复
举报
发布
lygo 回复 2017-09-14
老哥你说笑了:L
1   回复
举报
mr_liu 2017-09-14
1   回复
举报
发布
lygo 回复 2017-09-14
哈哈哈 一起学习呀;P
1   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子