STM32拨码开关验证
STM32拨码开关验证
- 拨码开关原理图
- 设计思路
- cubeMX配置
- 代码
- 主函数
- Code
拨码开关原理图
STM32主控端
座子端
设计思路
S1 S2 S3 S4输出高电平,拨码开关可以拉低电平,这样可以读取引脚状态,从而实现某些功能复用。
cubeMX配置
代码
GPIO
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_15, GPIO_PIN_SET);/*Configure GPIO pin Output Level */HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7, GPIO_PIN_SET);/*Configure GPIO pins : PA8 PA9 PA10 PA15 */GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_15;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/*Configure GPIO pins : PB3 PB6 PB7 */GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);}
主函数
/* USER CODE BEGIN Header */
/********************************************************************************* @file : main.c* @brief : Main program body******************************************************************************* @attention** <h2><center>© Copyright (c) 2022 STMicroelectronics.* All rights reserved.</center></h2>** This software component is licensed by ST under BSD 3-Clause license,* the "License"; You may not use this file except in compliance with the* License. You may obtain a copy of the License at:* opensource.org/licenses/BSD-3-Clause********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);static uint8_t switch_1 = 0;
static uint8_t switch_2 = 0;
static uint8_t switch_3 = 0;
static uint8_t switch_4 = 0;
/* 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 *//* 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();#if 1if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_15) == 1) {switch_1 = 1;}#endif#if 1if(HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_3) == 1 ) {switch_2 = 1;}if( HAL_GPIO_ReadPin( GPIOB, GPIO_PIN_6) == 1) {switch_3 = 1;}if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == 1) {switch_4 = 1;}#endifMX_USART2_UART_Init();/* USER CODE BEGIN 2 */uint8_t LED_CODE2[32]={0};uint8_t LED_CODE3[32]={1,2,3,4,5,6,7,8};HAL_StatusTypeDef TX_RET = HAL_ERROR;uint8_t count = 0;/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */TX_RET = HAL_UART_Receive(&huart2, LED_CODE2, 10, 1000);LED_CODE2[0] = count++;HAL_UART_Transmit(&huart2, LED_CODE2, 10, 1000);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);if(switch_1 == 1){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);}if(switch_2 == 1 || switch_3 == 1 || switch_4 == 1){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_RESET);HAL_Delay(100);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);}/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Configure the main internal regulator output voltage*/__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_MSI;RCC_OscInitStruct.MSIState = RCC_MSI_ON;RCC_OscInitStruct.MSICalibrationValue = 0;RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;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_MSI;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* 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 *//* 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,tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Code
链接:https://pan.baidu.com/s/1cOGaGbeOq_5Smr-yTwg3VA
提取码:60hv
STM32拨码开关验证相关推荐
- STM32+拨码开关,读取拨码开关电平值并转换成16进制数,一种简洁的编程思路
以2p拨码开关为例 在main.h中,宏定义单片机IO口和函数HAL_GPIO_ReadPin()的返回值 #define DIP0_Pin GPIO_PIN_0 #define DIP0_GPIO_ ...
- 我在STM32单片机上跑神经网络算法
01 前言 为什么可以在STM32上面跑神经网络? 简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用. 目前使用X ...
- 在STM32单片机上跑神经网络算法
摘要:为什么可以在STM32上面跑神经网络?简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用,目前使用X-Cube- ...
- STM32驱动K210人脸识别模块经验汇总
本次是基于HLK-KT210 AI人脸识别模块和STM32单片机进行设计的人脸识别项目.主要是人脸识别功能的分析和使用. 1 模块连接 本次使用了海凌科生产的DEMO板,但是由于板子的客观因素,TTL ...
- 基于Ubuntu和STM32分析全局变量、局部变量、堆、栈
目录 一.C程序的内存分配 二.STM32的内存分布 三.Ubuntu系统和STM32中验证 1.Ubuntu 2.STM32 四.参考资料 一.C程序的内存分配 栈(stack) 由编译器自动分 ...
- 华芯微特SWM260读写W25Q128
W25Q128的读写采用的是SPI接口:本人移植的程序是在STM32上验证过的,只需要修改相应的底层函数即可: 初始化SPI接口: void MX_SPI_Flash_Init(void) {SPI_ ...
- 移植ucos-III到stm32f103c8t6
昨天在看stm32相关资料时看到野火的教程<uCOS-III 应用开发指南-基于 STM32F103系列>,试着移植ucos-iii到stm32上,整个过程还算比较顺利的,但遇到了一个比较 ...
- Matlab代码导入STM32F103流程
文章目录 软件准备 STM32CubeMX简介 配置STM32CUBEMX 配置SIMULINK SIMULINK对STM32F103进行点灯试验 一般算法导入到STM32 问题故障解决 参考 软件准 ...
- html做万用表效果,牛人DIY高精度六位半数字万用表 - 电子制作 - 电子发烧友网...
概述: 数字多用表是常用的测量仪器,目前市场常见的是3.5(三位半)和4.5 手持表,用于一般测量,另外高端的则是6.5位以上的台式表,价格较高,用于高精度测量. 随着电子技术的进步,高性能低成本的器 ...
最新文章
- 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
- java小程序源码_【小程序源码分享】基于Java开发的物业管理系统!
- centos7 dns配置_Centos7.7 安装FreeIPA (三)
- SQLServer 阻塞的等待类型解析
- android 线程锁Lock
- 3150 Pibonacci数 - Wikioi
- sql alter表字段处理
- 同时生成 Release版和Debug版DLL的方法
- labelImg标注工具(win10安装)
- 2017年广东省乡级行政区划数据介绍
- 数学和计算机竞赛,数学奥赛VS信息学奥赛,数学基础扎实的孩子
- Visio绘图中遇到的一些问题及相应解决方法(持续更新)
- UCF101数据集处理
- Openwrt_树莓派B+_Wifi中继
- Charles 模拟慢网络
- 流畅的python第六章 使用一等函数设计模式
- man手册中文版设置
- Unity3D:2D角色移动篇2:动画的添加
- 法律人工智能的前世今生,附熊明辉教授简历(公号回复“法律AI”或“熊明辉AI”下载PDF典型资料,欢迎转发、赞赏支持科普)
- VS Code 空闲时的 CPU 使用率是 13%