修改HAL标准库用printf函数发送数据直接输出

发布者:和谐共融最新更新时间:2024-08-14 来源: cnblogs关键字:printf函数  发送数据  直接输出 手机看文章 扫描二维码
随时随地手机看文章

主函数文件,请直接关注自己写上去的代码:

直接看43行代码:#include 'stdio.h'//要添加这个头文件

还有97行到112行:实现用HAL库函数和printf函数发送数据

  1 /**

  2   ******************************************************************************

  3   * File Name          : main.c

  4   * Description        : Main program body

  5   ******************************************************************************

  6   ** This notice applies to any and all portions of this file

  7   * that are not between comment pairs USER CODE BEGIN and

  8   * USER CODE END. Other portions of this file, whether 

  9   * inserted by the user or by software development tools

 10   * are owned by their respective copyright owners.

 11   *

 12   * COPYRIGHT(c) 2017 STMicroelectronics

 13   *

 14   * Redistribution and use in source and binary forms, with or without modification,

 15   * are permitted provided that the following conditions are met:

 16   *   1. Redistributions of source code must retain the above copyright notice,

 17   *      this list of conditions and the following disclaimer.

 18   *   2. Redistributions in binary form must reproduce the above copyright notice,

 19   *      this list of conditions and the following disclaimer in the documentation

 20   *      and/or other materials provided with the distribution.

 21   *   3. Neither the name of STMicroelectronics nor the names of its contributors

 22   *      may be used to endorse or promote products derived from this software

 23   *      without specific prior written permission.

 24   *

 25   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'

 26   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE

 27   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

 28   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

 29   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL

 30   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR

 31   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER

 32   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

 33   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

 34   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 35   *

 36   ******************************************************************************

 37   */

 38 /* Includes ------------------------------------------------------------------*/

 39 #include 'main.h'

 40 #include 'stm32f1xx_hal.h'

 41 

 42 /* USER CODE BEGIN Includes */

 43 #include 'stdio.h'//添加这个头文件

 44 /* USER CODE END Includes */

 45 

 46 /* Private variables ---------------------------------------------------------*/

 47 UART_HandleTypeDef huart1;

 48 

 49 /* USER CODE BEGIN PV */

 50 /* Private variables ---------------------------------------------------------*/

 51 

 52 /* USER CODE END PV */

 53 

 54 /* Private function prototypes -----------------------------------------------*/

 55 void SystemClock_Config(void);

 56 static void MX_GPIO_Init(void);

 57 static void MX_USART1_UART_Init(void);

 58 

 59 /* USER CODE BEGIN PFP */

 60 /* Private function prototypes -----------------------------------------------*/

 61 

 62 /* USER CODE END PFP */

 63 

 64 /* USER CODE BEGIN 0 */

 65 

 66 /* USER CODE END 0 */

 67 

 68 int main(void)

 69 {

 70 

 71   /* USER CODE BEGIN 1 */

 72 

 73   /* USER CODE END 1 */

 74 

 75   /* MCU Configuration----------------------------------------------------------*/

 76 

 77   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

 78   HAL_Init();

 79 

 80   /* USER CODE BEGIN Init */

 81 

 82   /* USER CODE END Init */

 83 

 84   /* Configure the system clock */

 85   SystemClock_Config();

 86 

 87   /* USER CODE BEGIN SysInit */

 88 

 89   /* USER CODE END SysInit */

 90 

 91   /* Initialize all configured peripherals */

 92   MX_GPIO_Init();

 93   MX_USART1_UART_Init();

 94 

 95   /* USER CODE BEGIN 2 */

 96 

 97 HAL_UART_Transmit (&huart1,'使用HAL库函数发送数据n',21,1000);

 98 printf('n使用函数Printf函数发送数据n');

 99 

100 char t;

101 while(1)

102 {

103     scanf('%c',&t);//接受的t的数值

104     if(t=='0')

105     {

106         HAL_GPIO_WritePin (GPIOB,GPIO_PIN_5,0);//给低电平,红灯亮

107     }

108     if(t=='1')

109     {

110         HAL_GPIO_WritePin (GPIOB,GPIO_PIN_5,1);//给高电平,红灯灭

111     }

112 }

113 

114 

115   /* USER CODE END 2 */

116 

117   /* Infinite loop */

118   /* USER CODE BEGIN WHILE */

119   while (1)

120   {

121   /* USER CODE END WHILE */

122 

123   /* USER CODE BEGIN 3 */

124 

125   }

126   /* USER CODE END 3 */

127 

128 }

129 

130 /** System Clock Configuration

131 */

132 void SystemClock_Config(void)

133 {

134 

135   RCC_OscInitTypeDef RCC_OscInitStruct;

136   RCC_ClkInitTypeDef RCC_ClkInitStruct;

137 

138     /**Initializes the CPU, AHB and APB busses clocks 

139     */

140   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

141   RCC_OscInitStruct.HSIState = RCC_HSI_ON;

142   RCC_OscInitStruct.HSICalibrationValue = 16;

143   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

144   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

145   {

146     _Error_Handler(__FILE__, __LINE__);

147   }

148 

149     /**Initializes the CPU, AHB and APB busses clocks 

150     */

151   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

152                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

153   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

154   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

155   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

156   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

157 

158   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

159   {

160     _Error_Handler(__FILE__, __LINE__);

161   }

162 

163     /**Configure the Systick interrupt time 

164     */

165   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

166 

167     /**Configure the Systick 

168     */

169   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

170 

171   /* SysTick_IRQn interrupt configuration */

172   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

173 }

174 

175 /* USART1 init function */

176 static void MX_USART1_UART_Init(void)

177 {

178 

179   huart1.Instance = USART1;

180   huart1.Init.BaudRate = 9600;

181   huart1.Init.WordLength = UART_WORDLENGTH_8B;

182   huart1.Init.StopBits = UART_STOPBITS_1;

183   huart1.Init.Parity = UART_PARITY_NONE;

184   huart1.Init.Mode = UART_MODE_TX_RX;

185   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;

186   huart1.Init.OverSampling = UART_OVERSAMPLING_16;

187   if (HAL_UART_Init(&huart1) != HAL_OK)

188   {

189     _Error_Handler(__FILE__, __LINE__);

190   }

191 

192 }

193 

194 /** Configure pins as 

195         * Analog 

196         * Input 

197         * Output

198         * EVENT_OUT

199         * EXTI

200 */

201 static void MX_GPIO_Init(void)

202 {

203 

204   GPIO_InitTypeDef GPIO_InitStruct;

205 

206   /* GPIO Ports Clock Enable */

207   __HAL_RCC_GPIOA_CLK_ENABLE();

208   __HAL_RCC_GPIOB_CLK_ENABLE();

209 

210   /*Configure GPIO pin Output Level */

211   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

212 

213   /*Configure GPIO pin : PB5 */

214   GPIO_InitStruct.Pin = GPIO_PIN_5;

215   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

216   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

217   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

218 

219 }

220 

221 /* USER CODE BEGIN 4 */

222 

223 /* USER CODE END 4 */

224 

225 /**

226   * @brief  This function is executed in case of error occurrence.

227   * @param  None

228   * @retval None

229   */

230 void _Error_Handler(char * file, int line)

[1] [2]
关键字:printf函数  发送数据  直接输出 引用地址:修改HAL标准库用printf函数发送数据直接输出

上一篇:STM32串口usart发送数据
下一篇:用STM32CudeMX 配置用到的函数(记住他!)

推荐阅读最新更新时间:2024-11-02 14:34

【STM32Cube_07】使用USART发送和接收数据(中断模式)
1. 准备工作 硬件准备 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; 准备一个串口调试助手,这里我使用的是Serial Port Utility; Keil MDK和串口助手Serial Port Utility 的安装包都可以在文末关注公众号获取,回复关键字获取相应的安装包: 2.生成MDK工程 — 初始化GPIO为输入 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速时钟(HSE),则需要在
[单片机]
【STM32Cube_07】使用USART<font color='red'>发送</font>和接收<font color='red'>数据</font>(中断模式)
单片机串口发送数据
很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu 首先定义一个数据帧的结构体,该结构体可以做为一个全局变量,所有的发送都要经过这个结构体: //结构体 struct { char busy_falg;//忙标志,若在发送数据时置位1,即在开始发送置位1,发送结束置位0 int index;//索引,指向需要发送数组的位置 int length;//整个数据帧的长度 char *buf;//指向需要发送的数据帧,建议为全局变量,否则一旦开始发送,必须等到发送结束,即判断bus
[单片机]
STM32的printf函数重定向
在前面学习了STM32的串口编程,通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据,接下来我们可以实现STM32工程上的printf()函数了,方便用于程序开发中调试信息的打印。 1. 法1:使用MicroLIB库 1.1 KEIL-MDK中的Use MicroLIB选项 在MDK开发环境中, MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使用,且这些应用程序不在操作系统中运行。 MicroLib进行了高度优化以使代码变得很小,功能比缺省c库少,不具备某些ISO c特性,部分库函数的运行速度也比较慢,如内存拷贝函数memcpy()。 MicroLib与缺省c库之间
[单片机]
关于在Ubuntu下开发STM32程序printf函数的重映射问题
最近使用STM32CubeMX加Ubuntu18.0来进行STM32相关程序的开发,在使用串口打印的使用出现了如下问题: printf函数按照Keil中的方式进行映射后,在软件仍然无法正常使用Printf函数 使用了__io_putchar() 和 int putc()都无法解决问题 我是使用的时makefile项目来通过命令行进行编译的,在网上查了,并且亲自测试后得出结论,在STM32CubeMX生成的makefile项目文件缺少syscalls.c文件,进一步查询发现这个主要是进行系统调用的。结合其中的函数,在使用int __io_putchar(int ch)进行printf重映射的时候还需加入系统调用的相关函数,如
[单片机]
关于在Ubuntu下开发STM32程序<font color='red'>printf</font><font color='red'>函数</font>的重映射问题
在Keil中使用printf函数
在C51中、printf和scanf函数主要用于串行数据的收发 有时在进行软件调试的时候,需要使用printf函数输出一些结果 要在Keil中看到这些结果,只需要两步:(当然首先要进入调试界面再做以下两步) 1 设置 打开Peripherals-- Serial窗口,选择IRQ中的TI、RI两个选项 2 打开输出窗口 打开View-- Serial Window #1窗口 在程序中的printf语句的输出就显示在这个窗口中 现在就到程序窗口运行程序、运行结束后打开Serial窗口就可以看到printf的输出了 OVER...
[单片机]
s3c6410 s3c2440串口发送接收数据的实现(轮询)及相关寄存器
1 6410与串口相关寄存器 一 需要设置的寄存器(其实进入uboot后,串口已经设置好了,直接发送数据就行了,) 1)模式 UCON (轮询,中断,DMA等) 2)相关参数 ULCON0 定义了串口数据的帧格式,数据位长度,奇偶校验位,停止位(8-N-1) BRDIV 定义了波特率的计算公式所得结果的整数部分 UDIVSLOT0 定义了波特率的计算公式所得结果的小数部分 3)高级选项(串口的发送接收缓冲的大小(fifo)默认是1B,可改成64B 二 发送接收数据 相关的寄存器 UTXH0 UART channel 0 transmit buffer register URXH0 UART chan
[单片机]
STM32F4学习笔记5——stm32串口发送数据最高位错误问题
最近,在做基于stm32f401串口的ModBus协议通信,遇到了stm32串口发送数据的问题。花了一整天去查找问题,从ModBus协议格式、调度算法到串口配置,最终终于把问题解决,记录下来。 问题描述: ModBus协议中配置stm32f401串口为奇校验,8位数据位,1位停止位,程序如下: void uart_init( u32 bound ) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitSt
[单片机]
avr单片机 串口实现printf(使用变参函数
#include #include #include typedef unsigned char uint8; static void usart_init(void) { UCSRA = 0x02; UCSRB = 0x18; UCSRC = 0x06; UBRRH = 0x00; UBRRL = 103; } static void put_char(uint8 data) { if (data == '/r') put_char(0x09); while ( !(UCSRA & (1 UDRE
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved