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

发布时间:2024-08-14  

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

直接看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)

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    PORTB,SCK ;模式0 bcf PORTB,cs ;片选 movlw 82H ;加载操作码 movwf spi_out ;置入寄存器 call spiout ;调用子程序输出操作码 movf......
    : SelectSort_Functions 02:接口定义: 03:程序编写: 04:定义全局数据块: 05:OB中调用子程序: 06:程序演示结果: ......
    着不同的过程任务,相当于主循环程序的子程序。模块化编程中被调用块不向调用块返回数据。 03、模块化编程实例 模块化编程实例1 - 液位监视 • 监视一个慢变得过程不需要每次扫描都进行。如果......
    时使用SM0.1调用子程序MBUS_INIT进行初始化,使用SM0.0调用MBUS_SLAVE,并指定相应参数。关于参数的详细说明,可在子程序的局部变量表中找到;  西门子smart200的modbus从站......
    相当于mov pc,=Reset。bl是调用子程序指令,相当于ldr r14,pc 然后调用子程序子程序返回时,再mov r14,pc HandleUndef:    b HandleUndef......
    ;7; 说明:位操作只需一个指令周期即可完成,而大部分的C编译器的"%"运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。 (2)、平方运算 如......
    改为:a=a&7; 说明:位操作只需一个指令周期即可完成,而大部分的C编译器的"%"运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。 (2)、平方......
    地址了。主函数的功能大家肯定都能分析了,不然看这个教程也没什么意义了。   二、子程序的书写      下面讲的是子程序如何书写,子程序是要被调用的,你必须告诉编译器其他模块可以调用子程序模块中的哪些程序......
    经典的PLC程序实例;一套完整的PLC程序,并不仅仅是使系统能够运行起来这么简单,它也需要完整的注释、精良的架构、良好的可扩展性、完备的报警保护系统、运行前的模拟系统。今天分享几个PLC实例,仅供......
    )运动包络设置完成。在调用子程序中出现Q0.0对应的位控子程序。 六、PLC程序 PART 06 1、上电初始化 SM0.1:首次扫描周期时该位打开,用途是调用初始化子程序。 2、电机控制子程序......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>