当前位置: 首页 > news >正文

网站右侧浮动窗口孝昌县建设局网站

网站右侧浮动窗口,孝昌县建设局网站,创可贴设计网,phpstudy做正式网站按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯#xff1a;是直接控制输出引脚#xff0c;GPIO初始化推挽输出即可 按键控制LED#xff1a;是按键输入信号从而控制输出引脚#xff0c;GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯是直接控制输出引脚GPIO初始化推挽输出即可 按键控制LED是按键输入信号从而控制输出引脚GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是控制GPIO本质还是1.RCC时钟使能  2.结构体配置GPIO寄存器  3.控制GPIO 标准库写法 led.c 1.RCC时钟使能  2.结构体配置GPIO寄存器  3.控制GPIO我们这里封装成函数ON;OFF;swtich #include stm32f10x.h // Device header #include delay.h void LED_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//1.RCC时钟使能GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_1|GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure); //2.结构体配置GPIO寄存器GPIO_SetBits (GPIOA,GPIO_Pin_1 | GPIO_Pin_2); //3.控制GPIO值为1 }/*** brief LED1灯亮* param 无* retval 无*/ void LED1_ON(void) {GPIO_ResetBits (GPIOA,GPIO_Pin_1); //控制LED1亮 }/*** brief LED2灯亮* param 无* retval 无*/ void LED2_ON(void) {GPIO_ResetBits (GPIOA,GPIO_Pin_2); //控制LED2亮 }/*** brief LED灭* param 无* retval 无*/ void LED1_OFF(void) {GPIO_SetBits (GPIOA,GPIO_Pin_1); //控制LED1灭 }/*** brief LED灭* param 无* retval 无*/ void LED2_OFF(void) {GPIO_SetBits (GPIOA,GPIO_Pin_2); //控制LED2灭 }/*** brief LED1灯状态切换* param 无* retval 无*/ void LED1_switch(void) {if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1) 1){GPIO_ResetBits (GPIOA,GPIO_Pin_1);}else{GPIO_SetBits (GPIOA,GPIO_Pin_1);} }/*** brief LED2灯状态切换* param 无* retval 无*/ void LED2_switch(void) {if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2) Bit_SET){GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_RESET);}else{GPIO_WriteBit(GPIOA, GPIO_Pin_2, Bit_SET);} } led.h #ifndef __LED_H #define __LED_Hvoid LED_Init(void); void LED1_ON(void); void LED2_ON(void); void LED1_OFF(void); void LED2_OFF(void); void LED1_switch(void); void LED2_switch(void);#endifkey.c 这里按键获取函数采用的是delay检测是阻塞式的函数这不好等学到定时器中断我们再用定时器定时检测 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0)     {         Delay_ms(20);    //按下消抖         while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0);         Delay_ms(20);    //松开消抖         keynum 1;     } #include stm32f10x.h // Device header #include DELAY.h void KEY_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//1.RCC时钟使能GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_1|GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStructure); //2.结构体配置GPIO寄存器}/*** brief 按键获取函数* param 无* retval 按键值1-PB1,2-pb11*/ uint8_t KEY_Getstate(void) {uint8_t keynum 0;if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0){Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) 0);Delay_ms(20);keynum 1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) 0){Delay_ms(20); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) 0);Delay_ms(20); keynum 2;} return keynum; } key.h #ifndef __KEY_H #define __KEY_Hvoid KEY_Init(void); uint8_t KEY_Getstate(void); #endifmain() 定义一个变量把按键状态接收通过不同按键值来控制LED状态 #include stm32f10x.h // Device header #include Delay.h #include LED.h #include KEY.huint8_t keynum; int main () {KEY_Init();LED_Init();while(1){keynum KEY_Getstate();if(keynum 1){LED1_switch();}else if(keynum 2){LED2_switch();}} } 标准库写完了接下来我们写HAL库 HAL库分三步 1.建工程 2.设配置 3.写代码 HAL库写法 一. 关于建工程请参考江科大学习笔记之——HAL库点亮一个LED灯-CSDN博客在里面有详细步骤简单易懂 二.配置设置 这里我设置错了应该是PB11,你们自己注意一下 ctrls生成代码 三.写代码 为了方便我们把LEDKEY单独拿出来放在System文件夹下 在cubeIDE里面想建立自己的.C.H文件步骤如下 1.建立文件夹 2. 鼠标右键点击文件名–Properties 3. 进入Includes 添加文件的路径 同时还要增加源文件的路径 好准备工作做完了上面cube ide的模块化是我自己在网上找半天才找到的方法 STM32CubemxIDE 导入自定义的.c和.h文件_stm32cubeide添加源文件-CSDN博客 本想问别人但是想想还是提高自己解决问题的能力吧所以我就花了更多时间去自己搜索解决方法。 现在开始写代码 模块代码的逻辑都一样只是把标准库的函数我就不多赘述了换成了HAL库的函数 led.c 这里LED灯的熄灭与点亮有电平翻转函数HAL_GPIO_TogglePin关于HAL库的函数可以看 HAL库函数合集-CSDN博客 #include gpio.h/*** brief LED1灯亮* param 无* retval 无*/ void LED1_ON(void) {HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);//控制LED1亮 }/*** brief LED2灯亮* param 无* retval 无*/ void LED2_ON(void) {HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //控制LED2亮 }/*** brief LED灭* param 无* retval 无*/ void LED1_OFF(void) {HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);//控制LED1灭 }/*** brief LED灭* param 无* retval 无*/ void LED2_OFF(void) {HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);//控制LED2灭 }/*** brief LED1灯状态切换* param 无* retval 无*/ void LED1_switch(void) {HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1); }/*** brief LED2灯状态切换* param 无* retval 无*/ void LED2_switch(void) {HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2); } led.h #ifndef __LED_H #define __LED_Hvoid LED1_ON(void); void LED2_ON(void); void LED1_OFF(void); void LED2_OFF(void); void LED1_switch(void); void LED2_switch(void);#endifkey,c #include gpio.h /*** brief 按键获取函数* param 无* retval 按键值1-PB1,2-pb11*/ uint8_t KEY_Getstate(void) {uint8_t keynum 0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) 0){HAL_Delay(20);while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1) 0);HAL_Delay(20);keynum 1;}if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11) 0){HAL_Delay(20);while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11) 0);HAL_Delay(20);keynum 2;} return keynum; } key.h #ifndef __KEY_H #define __KEY_Huint8_t KEY_Getstate(void); #endifmain 这里就定义了uint8_t keynum; 然后写了while,其他都是生产的代码 while (1){keynum KEY_Getstate();if(keynum 1){LED1_switch();}else if(keynum 2){LED1_OFF();} } /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body******************************************************************************* attention** Copyright (c) 2024 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 gpio.h/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ uint8_t keynum; /* 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); /* 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();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){keynum KEY_Getstate();if(keynum 1){LED1_switch();}else if(keynum 2){LED1_OFF();}/* USER CODE END WHILE *//* 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};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL.PLLMUL RCC_PLL_MUL16;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_DIV2;RCC_ClkInitStruct.APB2CLKDivider RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(RCC_ClkInitStruct, FLASH_LATENCY_2) ! 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 */__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.yingshimen.cn/news/45455/

相关文章:

  • 搭建视频网站郑州网球公开赛
  • 万网主机 网站访问工业软件公司排名
  • 网站内链设置非专业人士可以做网站编辑的工作吗
  • 视频网站开发公司有哪些公司wordpress免费商业主题
  • 公司网站有中文域名吗响应式商场网站
  • 比一网站建设php装修公司网站源码
  • 网站建设的专业知识滨江做网站
  • 网站设计推广方案抚州市建设局官网站
  • 曲周县建设局网站网站建设描述怎么写
  • 建站平台转型手机网站趋势
  • 关于网站建设案例深圳有实力的seo公司
  • 做一个网站需要多少钱大概费用公司名称变更
  • 免费网站建设优化烟台百度网站建设
  • 淄博市建设监理协会网站ic设计公司排名
  • 网站制作商家入驻手机中国手机大全
  • 企业网站设计制作教程保定网站制作网站
  • 公司网站开发创业运城做网站哪家好
  • 长春门户网站建设制作聊城pc网站建设软件
  • 网站建设与管理出来工资网站建设的品牌
  • 宣传 网站建设方案模板pythom+网站开发规范
  • 网站建设方案申请报告门户网站开发请示
  • wordpress 登陆后跳转首页关于优化培训
  • 做网站卖彩票中国建设银行贵州分行网站
  • 移动端网站开发最好的环境分销商城网站开发
  • 江苏省网站建设哪家好奉贤网站建设上海站霸
  • 怎么做锅炉网站大型游戏平台排行榜
  • 事务所网站制作方案wordpress仿微博主题
  • 珠海网站开发排名房产经纪人获客神器
  • 大型网站开发收费2023二级建造师报名官网入口
  • 福建省建设资格管理中心网站湖北营销型网站建设价格