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>&copy; 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拨码开关验证相关推荐

  1. STM32+拨码开关,读取拨码开关电平值并转换成16进制数,一种简洁的编程思路

    以2p拨码开关为例 在main.h中,宏定义单片机IO口和函数HAL_GPIO_ReadPin()的返回值 #define DIP0_Pin GPIO_PIN_0 #define DIP0_GPIO_ ...

  2. 我在STM32单片机上跑神经网络算法

    01  前言 为什么可以在STM32上面跑神经网络? 简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用. 目前使用X ...

  3. 在STM32单片机上跑神经网络算法

    摘要:为什么可以在STM32上面跑神经网络?简而言之就是使用STM32CubeMX中的X-Cube-AI扩展包将当前比较热门的AI框架进行C代码的转化,以支持在嵌入式设备上使用,目前使用X-Cube- ...

  4. STM32驱动K210人脸识别模块经验汇总

    本次是基于HLK-KT210 AI人脸识别模块和STM32单片机进行设计的人脸识别项目.主要是人脸识别功能的分析和使用. 1 模块连接 本次使用了海凌科生产的DEMO板,但是由于板子的客观因素,TTL ...

  5. 基于Ubuntu和STM32分析全局变量、局部变量、堆、栈

    目录 一.C程序的内存分配 二.STM32的内存分布 三.Ubuntu系统和STM32中验证 1.Ubuntu ​ 2.STM32 四.参考资料 一.C程序的内存分配 栈(stack) 由编译器自动分 ...

  6. 华芯微特SWM260读写W25Q128

    W25Q128的读写采用的是SPI接口:本人移植的程序是在STM32上验证过的,只需要修改相应的底层函数即可: 初始化SPI接口: void MX_SPI_Flash_Init(void) {SPI_ ...

  7. 移植ucos-III到stm32f103c8t6

    昨天在看stm32相关资料时看到野火的教程<uCOS-III 应用开发指南-基于 STM32F103系列>,试着移植ucos-iii到stm32上,整个过程还算比较顺利的,但遇到了一个比较 ...

  8. Matlab代码导入STM32F103流程

    文章目录 软件准备 STM32CubeMX简介 配置STM32CUBEMX 配置SIMULINK SIMULINK对STM32F103进行点灯试验 一般算法导入到STM32 问题故障解决 参考 软件准 ...

  9. html做万用表效果,牛人DIY高精度六位半数字万用表 - 电子制作 - 电子发烧友网...

    概述: 数字多用表是常用的测量仪器,目前市场常见的是3.5(三位半)和4.5 手持表,用于一般测量,另外高端的则是6.5位以上的台式表,价格较高,用于高精度测量. 随着电子技术的进步,高性能低成本的器 ...

最新文章

  1. 分别用Eigen和C++(OpenCV)实现图像(矩阵)转置
  2. java小程序源码_【小程序源码分享】基于Java开发的物业管理系统!
  3. centos7 dns配置_Centos7.7 安装FreeIPA (三)
  4. SQLServer 阻塞的等待类型解析
  5. android 线程锁Lock
  6. 3150 Pibonacci数 - Wikioi
  7. sql alter表字段处理
  8. 同时生成 Release版和Debug版DLL的方法
  9. labelImg标注工具(win10安装)
  10. 2017年广东省乡级行政区划数据介绍
  11. 数学和计算机竞赛,数学奥赛VS信息学奥赛,数学基础扎实的孩子
  12. Visio绘图中遇到的一些问题及相应解决方法(持续更新)
  13. UCF101数据集处理
  14. Openwrt_树莓派B+_Wifi中继
  15. Charles 模拟慢网络
  16. 流畅的python第六章 使用一等函数设计模式
  17. man手册中文版设置
  18. Unity3D:2D角色移动篇2:动画的添加
  19. 法律人工智能的前世今生,附熊明辉教授简历(公号回复“法律AI”或“熊明辉AI”下载PDF典型资料,欢迎转发、赞赏支持科普)
  20. VS Code 空闲时的 CPU 使用率是 13%

热门文章

  1. 关于S3学习所涉及到的知识(四):GIC_V3寄存器介绍
  2. 软件项目客户迟迟不肯验收怎么办?
  3. Python函数模板
  4. java中如何将数组转换为List
  5. TDK| 电源——反激变压器设计过程
  6. 不卖简历卖服务的“51猎头”
  7. photoshop 100例
  8. android百度地图(卫星图,热力图,交通图)。七
  9. 数据可视化D3相关记录
  10. 新旧年交替的“投基”策略