详细介绍:STM32 GPIO-------设置成51单片机模式输出

news/2025/11/12 13:58:03/文章来源:https://www.cnblogs.com/tlnshuju/p/19213738

详细介绍:STM32 GPIO-------设置成51单片机模式输出

2025-11-12 13:51  tlnshuju  阅读(0)  评论(0)    收藏  举报

在做项目的过程中,我总感觉STM32 GPIO 电平的高低输出用函数时比较费时(敲代码费时),没有51单片机IO输出时的简单。在这里,我给出了STM32类似51单片机IO口输出的设置方式。

废话不多说,我直接上图及代码。写出的代码经过实际的实验,验证可行。

主函数代码

/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "iwdg.h"
#include "tim.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define LED1(n) HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, n);
#define LED2(n) HAL_GPIO_WritePin(GPIOC, LED2_Pin, n);
#define LED3(n) HAL_GPIO_WritePin(GPIOC, LED3_Pin, n);
#define LED4(n) HAL_GPIO_WritePin(GPIOC, LED4_Pin, n);

#define RUN_LED1(n) HAL_GPIO_WritePin(GPIOE, RUN_LED1_Pin, n);
#define RUN_LED2(n) HAL_GPIO_WritePin(GPIOE, RUN_LED2_Pin, n);
#define RUN_LED3(n) HAL_GPIO_WritePin(GPIOE, RUN_LED3_Pin, n);

#define CONTROL1(n) HAL_GPIO_WritePin(GPIOA, MCU_CO1_Pin, n);
#define CONTROL2(n) HAL_GPIO_WritePin(GPIOA, MCU_CO2_Pin, n);
#define CONTROL3(n) HAL_GPIO_WritePin(MCU_CO3_GPIO_Port, MCU_CO3_Pin, n);
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
//定时器
#define TIME_HTIM htim1


//创建定时器计数
uint16_t timeCount;
/* USER CODE END PM */

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

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{

/* USER CODE BEGIN 1 */
uint8_t i=0;
uint16_t time_1s=0;
timeCount=0;

/* USER CODE END 1 */

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

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_IWDG_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
//开启定时器
HAL_TIM_Base_Start_IT(&TIME_HTIM);
//复位看门狗 喂狗
HAL_IWDG_Refresh(&hiwdg);

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
//复位看门狗 喂狗
HAL_IWDG_Refresh(&hiwdg);
if(timeCount>=200)
{
timeCount=0;
time_1s++;
}
if(time_1s>=1000)
{
time_1s=0;
RUN_LED1(1-i);
i=1-i;
}
}
/* USER CODE END 3 */
}

/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

/** Initializes the RCC Oscillators according to the specified parameters
* in the RCC_OscInitTypeDef structure.
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 168;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();
}
}

/* USER CODE BEGIN 4 */
//定时器中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//定时为5us
if (htim->Instance==htim1.Instance)
{
timeCount++;
if(timeCount>=65530)
{
timeCount=0;
}
}
}
/* USER CODE END 4 */

/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/963392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025高压加速老化/HAST/PCT/热流仪厂家推荐伟煌试验设备,专业可靠!

2025高压加速老化/HAST/PCT/热流仪厂家推荐伟煌试验设备,专业可靠! 在当今电子产品日益精密、可靠性要求不断提升的背景下,高压加速老化、高压加速老化HAST、高压加速老化PCT以及热流仪等测试设备已成为电子制造、汽…

PK6500无源探头在5G基站射频模块测试中的应用方案

一、应用场景 5G 基站作为通信网络的核心基础设施,其射频模块承担着信号发射、接收与功率放大的关键功能,模块内功率放大器(PA)、混频器等器件的性能直接决定基站的通信质量。在研发与生产测试中,需重点测量以下参…

2025开窗器/链条/机芯/配件厂家推荐湖州万荣,专业制造品质保障

2025开窗器/链条/机芯/配件厂家推荐湖州万荣,专业制造品质保障 技术挑战与行业现状 在现代建筑智能化发展的浪潮中,开窗器及其核心部件链条、机芯和配件的技术性能直接关系到整个系统的可靠性和使用寿命。当前行业面…

2025 年 11 月配电柜/配电箱/开关柜厂家推荐排行榜,智能配电系统,低压配电柜,高压开关柜,户外配电箱公司推荐

2025 年 11 月配电柜/配电箱/开关柜厂家推荐排行榜,智能配电系统,低压配电柜,高压开关柜,户外配电箱公司推荐 行业背景与发展趋势 随着我国新型电力系统建设的深入推进,配电设备行业正迎来智能化、数字化的转型升…

2025年11月学习平板推荐!学而思凭 AI功能成家长首选

很多家长都有过这样的纠结:想给孩子买平板辅助学习,却怕买成 “游戏机”;选了普通生活平板,又没有针对性的教育功能,最后钱花了还没效果。其实核心问题很简单 —— 没分清 “学习平板” 和 “生活平板” 的本质区别,而…

2025膜结构车棚/景观/体育看台/污水池加盖厂家推荐潍坊乾多,专业建造,品质保障

2025膜结构车棚/景观/体育看台/污水池加盖技术趋势与专业建造解析 膜结构行业面临的技术挑战与创新需求 随着城市化进程加速和环保要求提升,膜结构在车棚、景观、体育看台及污水池加盖等领域的应用日益广泛。然而,行…

2025年电镜实验室安装订做厂家权威推荐榜单:电镜实验室设计/电镜安装/电镜实验室建设源头厂家精选

在精密制造与科研需求持续增长的推动下,一间专业定制的电镜实验室已成为保障高精度观测与稳定运行的关键基础。 根据行业数据分析,2025年国内高端实验室设计市场规模预计将保持稳定增长,年增长率维持在 9%-11% 的区…

激光二极管增透膜技术:提升光学性能的关键方案

激光二极管防反射透镜通过光学干涉与多层膜设计,显著提升输出效率和光束质量,降低反射损耗,适用于光纤耦合、高功率阵列及可调谐激光器。激光二极管作为现代光电系统的核心光源,其输出效率与输出光束质量直接决定系…

【传奇开心果系列】基于Flet框架实现的桌面代码登录验证和SQLite 数据库结合实现数据持久化和多页面导航自定义组件模板特色和达成原理深度解析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

自适应动态规划(Adaptive Dynamic Programming,ADP)算法,采用演员-评论家(评价-执行)网络,看这一文即可【非常详细推导,认真推理,包你看得懂】 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 EVA/EVA发泡胶/板材/卷材/片材厂家推荐深圳市共创辉煌,防火/阻燃/防静电多性能保障

2025 EVA/EVA发泡胶/板材/卷材/片材厂家推荐:防火/阻燃/防静电多性能保障 当前EVA材料领域的技术挑战与突破 在现代工业材料领域,EVA及其衍生制品(包括发泡胶、板材、卷材、片材等)正面临着前所未有的技术挑战。随…

故障发现提速 80%,运维成本降 40%:魔方文娱的可观测升级之路

面对日益复杂的业务系统和迫在眉睫的稳定性挑战,一家领先的数字化解决方案提供商如何通过全链路可观测性建设实现故障发现效率提升 80%,运维成本降低 40% 的突破性成果。作者:曹睿、白玙客户证言:“通过构建新一代…

2025预埋件/幕墙/钢结构预埋件厂家推荐鑫诚源,专业生产各类连接件

2025预埋件行业深度解析:专业厂家的技术突破与产业升级 预埋件行业面临的技术挑战与数据洞察 在现代建筑领域,预埋件作为幕墙系统、钢结构工程和混凝土结构中的关键连接部件,其技术性能直接关系到整个建筑的安全性与…

SVM - Machine Learning - SVM Part 2: The Polynomial Kernel

SVM - Machine Learning - SVM Part 2: The Polynomial Kernel

pythonocc可视化

显示物体display, start_display, add_menu, add_function_to_menu = init_display()display.DisplayShape(my_cone, update=True)#my_cone为shape物体display.DisplayShape(cone, update=True)start_display()

2025铝排/铝棒/铝板厂家推荐山东宜发,导电合金材质齐全品质保障

2025铝排/铝棒/铝板厂家推荐:导电合金材质齐全品质保障 在当今快速发展的工业领域,铝材作为重要的基础材料,在电力、航空航天、交通运输等关键行业中扮演着不可或缺的角色。随着2025年的到来,市场对铝排、铝棒、铝…

2025营口颈椎病治疗推荐,范开英专业诊疗口碑之选

2025营口颈椎病治疗推荐,范开英专业诊疗口碑之选 颈椎疾病:不容忽视的健康隐患 在现代社会,颈椎疾病已成为困扰众多人群的常见健康问题。据统计数据显示,颈椎病的发病率呈现逐年上升趋势,且发病年龄不断年轻化。长…

2025蔬菜/生鲜/食材/水果/食堂/有机配送推荐,广东山农农业集团高效直达!

2025蔬菜生鲜食材水果食堂有机配送推荐,高效直达服务引领行业变革 行业面临的技术挑战与数据困境 随着消费升级和食品安全意识的提升,蔬菜生鲜配送行业正面临着前所未有的技术挑战。据统计数据显示,我国生鲜食材在流…

记录一个自动学习的脚本开发过程 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …