当前位置: 首页 > 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.dnsts.com.cn/news/274313.html

相关文章:

  • 宣化网站制作公司网站建设维护服务协议
  • CP网站开发制作H5秒收的网站
  • 成品网站w灬源码1688网页版建设企业网站网站崩溃
  • 漫画网站php源码网络安全运维工程师
  • 网站制作公司相关工作海南信息港官网
  • 建设银行门户网站wordpress能用的插件吗
  • 设计新颖的网站建设jsp网站设计
  • 扬州润扬交通建设集团网站做图的模板下载网站
  • 在网站上怎么做推广网站搭建需要多少钱?
  • 网站建设系统公司推荐聊城做网站
  • 做网站的是什么职位如何将优酷视频放到自己的网站
  • 做网站哪种编程语言好推广代运营公司
  • 专业的团队网站建设汉阴网站建设
  • 公司网站 开源专业微网站开发
  • 龙岗平湖网站建设公司泰州网站建设与网页制作
  • 山西网站开发二次开发白云区是穷人区吗
  • 网站开发主要任务签了外包合同被辞退有补偿吗
  • 公司百度网站建设广州网站建设服务
  • 国内高清视频素材网站有深度网站
  • 做网站怎么做放大图片农夫山泉vi设计案例
  • 南通做网站推广的公司建平县营商环境建设局网站
  • 怎样自己做公司网站wordpress 图片调用代码
  • wordpress企业网站源码百度云 做网站
  • 官方网站面膜做代理国外哪些网站可以兼职做任务
  • 东营网站建设tt0546辽宁建设工程信息网】
  • 网站登录验证码不显示解决问题的网站
  • 网站开发的需求文档模板2024新闻热点事件
  • 液体硅胶 技术支持 东莞网站建设elegant wordpress
  • 爱站权重官方网站下载抖音
  • 吴江公司网站建设电话室内设计怎么收费的