当前位置: 首页 > news >正文

有什么推广网站网站模板免费网盘

有什么推广网站,网站模板免费网盘,广州全屋定制,wordpress防止频繁搜索引言 C语言中经常使用printf来输出调试信息#xff0c;打印到屏幕。由于在单片机中没有屏幕#xff0c;但是我们可以重定向printf#xff0c;把数据打印到串口#xff0c;从而在电脑端接收调试信息。这是除了debug外#xff0c;另外一个非常有效的调试手段。 一、什么是pr…引言 C语言中经常使用printf来输出调试信息打印到屏幕。由于在单片机中没有屏幕但是我们可以重定向printf把数据打印到串口从而在电脑端接收调试信息。这是除了debug外另外一个非常有效的调试手段。 一、什么是printf的重定向 我们知道 C 语言中printf 函数默认输出设备是控制台如果要实现在串口或者 LCD 上显示必须重定义C语言标准库函数里调用的与输出设备相关的函数。比如使用 printf 输出到串口则需要将 fputc 里面的输出指向串口,这一过程就叫 重定向 。 二、怎么样重定向printf 那么如何让 STM32 使用 printf 函数呢很简单只需要将 fputc 里面的输出指向 STM32 串口即可fputc 函数有固定的格式我们只需要在函数内操作STM32串口即可。 2.1 配置microLIB 由于我们使用的开发环境或者说工具链是keil-MDK而在KEIL-MDK开发环境中本身是没有包含C语言的一些标准库函数如stdio.h这种文件等。        在KEIL-MDK开发环境中可以选择使用MicroLIB库。MicroLIB是一个高度优化的C库适用于嵌入式应用程序。它的特点是代码体积小但功能较少不支持某些ISO C特性。当然这里重定向printf要使用的库函数已经够用了。 我们可以直接在【魔法棒】中勾选上即可完成它的配置 2.2 重定向fputc函数寄存器实现 在使用MicroLIB库时需要重定向fputc函数。fputc函数的原型如下 int fputc(int ch, FILE* stream) { USART_SendChar(USART1, (uint8_t)ch); return ch; } 那么本次我们将printf重定向到串口上这里使用的串口是USART1只需要编写一个发送单字符数据的函数接着重新定义一下fputc函数即可实现printf的重定向。 也就是说只需要在usart.c中编写三个函数分别是串口的初始化、发送一个字符函数、fputc函数重写即可。 参考代码如下 1、usart.h #ifndef __USART_H #define __USART_H#include stm32f10x.h #include stdio.h// 初始化 void USART_Init(void);// 发送一个字符 void USART_SendChar(uint8_t ch);#endif 2、usart.c #include usart.h// 初始化 void USART_Init(void) {// 1. 开启GPIO时钟 PA9 PA10RCC-APB2ENR | RCC_APB2ENR_IOPAEN;RCC-APB2ENR | RCC_APB2ENR_USART1EN;// 2. 设置GPIO工作模式// PA9 TX 输出复用推挽输出 MODE-11 CNF-10// PA10 RX 输入浮空输入 MODE-00 CNF-01GPIOA-CRH | GPIO_CRH_MODE9;GPIOA-CRH | GPIO_CRH_CNF9_1;GPIOA-CRH ~GPIO_CRH_CNF9_0;GPIOA-CRH ~GPIO_CRH_MODE10;GPIOA-CRH ~GPIO_CRH_CNF10_1;GPIOA-CRH | GPIO_CRH_CNF10_0;// 3. 串口配置// 3.1 设置波特率USART1-BRR 0x271; // 115.2 Kpbs// 3.2 开启模块及收发使能USART1-CR1 | USART_CR1_UE;USART1-CR1 | USART_CR1_TE;USART1-CR1 | USART_CR1_RE;// 3.3 其他配置字长、奇偶校验、停止位USART1-CR1 ~USART_CR1_M;USART1-CR1 ~USART_CR1_PCE;USART1-CR2 ~USART_CR2_STOP; }// 发送一个字符 void USART_SendChar(uint8_t ch) {// 当发送的数据不为空时等待TXE为1则可以继续写入数据while ((USART1-SR USART_SR_TXE) 0){}// 发送一个字符USART1-DR ch; }// 重定向fputc函数 int fputc(int ch, FILE * file) {USART_SendChar((uint8_t)ch);return (int)ch; }3、main.c #include usart.hint main(void) {// 初始化USART_Init();// printfint a 100;printf(a %d, a);// 死循环保持状态while(1){ } }2.3 重定向fputc函数HAL库实现 然后我们在借助HAL库实现。其实也非常简单其在STM32CubeMX中需要进行的配置和前面串口通讯轮询案例的HAL库实现需要的配置是一样的因为本次作重定向主要就只是多重写一个fputc函数即STM32CubeMX软件自动生成代码后我们再在usart.c中添加重写fputc函数的代码即可非常简单。 所以这里附上前面HAL库实现的串口通讯轮询案例的文章链接可以直接去看看相关配置步骤USART_串口通讯轮询案例HAL库实现-CSDN博客https://blog.csdn.net/2301_79475128/article/details/145263748?spm1001.2014.3001.5502 然后根据上面所述原理这里直接给上添加到usart.c中的参考代码如下 /* USER CODE BEGIN 1 */int fputc(int ch, FILE * file) {HAL_UART_Transmit(huart1, (uint8_t *)ch, 1, 1000);return ch; }/* USER CODE END 1 */ 值得注意的是keil中要勾选上【microLIB】、代码中引入#includestdio.h 否则会提示找不到printf函数。 三、测试 编译以后我们烧录然后在串口助手中看效果 1、寄存器实现的测试 2、HAL库实现的测试 显然通过重定向printf我们可以通过printf将一些信息打印发送到电脑上使用串口助手进行查看。 以上便是本次文章的所有内容欢迎各位朋友在评论区讨论本人也是一名初学小白愿大家共同努力一起进步吧 鉴于笔者能力有限难免出现一些纰漏和不足望大家在评论区批评指正谢谢
http://www.tj-hxxt.cn/news/132690.html

相关文章:

  • php网站开发工资一个云主机 多个网站
  • 提供深圳网站制作公司生活服务行业网站建设
  • 电子商务和网络购物网站网站流量分析的指标有哪些
  • wordpress 建站简单吗自我介绍网站html
  • 如何做优惠券网站广东哪里网站建设
  • 浙江省建设厅干部学校网站主流网站 技术
  • php 网站模板网站总体规划
  • 基于网站开发小程序建立百度网站
  • 建设电子商务系统网站汽车网址
  • 男女做暧暧视频免费网站网站建设业务员招聘
  • 怎么做企业网站原型网站界面设计修改要多少钱
  • 社群网站建设赣州网上房地产
  • 南宁定制建站网络公司给我做网站我有没有源代码版权吗
  • 重庆制作网站公司哪家好在厦门做网站找谁
  • 网站建设制作设计公司长春营销型网站设计
  • 怎么做网站图片做餐饮要看的网站
  • 如何查看网站域名wordpress主题去版权乱码
  • WordPress网站动漫你在wordpress菜单参数设置
  • 如何在外管局网站上做a合同襄阳做网站哪家好
  • 网站建设公司的成本有哪些方面长沙个人做网站
  • 类型: 营销型网站建设wordpress 4.4.7
  • 专业的会议网站建设香蜜湖附近网站建设
  • 有做数学题的网站吗北仑宁波有没有做网站
  • 双流规划建设管理局网站沧州高端网站建设公司
  • 河北手机网站制作多少钱网站开发 工资高吗
  • 紫色网站网站搭建框架是什么
  • 类似中企动力的做网站的临沂网络网站建设
  • 网站是用虚拟机做还是服务器苏州个人网站建设
  • 长春网站制作设计网站开发 不好 怎么说
  • 烟台网站建设方案图片在线设计平台