您的位置:首页 > 健康 > 养生 > 简单的商城的网页设计作业_seo实战培训视频_云浮新增确诊病例30例_新闻发布会稿件

简单的商城的网页设计作业_seo实战培训视频_云浮新增确诊病例30例_新闻发布会稿件

2025/1/5 20:54:08 来源:https://blog.csdn.net/qq_71158060/article/details/144819065  浏览:    关键词:简单的商城的网页设计作业_seo实战培训视频_云浮新增确诊病例30例_新闻发布会稿件
简单的商城的网页设计作业_seo实战培训视频_云浮新增确诊病例30例_新闻发布会稿件

控制GPIO就三步

1.RCC时钟使能

2.结构体配置GPIO寄存器 

3.控制GPIO值

首先标准库写法

GPIO.c

这里注意推挽输出即可,然后 GPIO_Pin部分可以|来初始化列: GPIO_Pin_1| GPIO_Pin_2

就可以初始两个引脚

#include "stm32f10x.h"                  // Device headervoid gpio_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_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);			 	//2.结构体配置GPIO寄存器GPIO_SetBits (GPIOA,GPIO_Pin_All);					//3.控制GPIO值为1//GPIO_ResetBits (GPIOA,GPIO_Pin_1);					//3.控制GPIO值为0
}

GPIO.h

#ifndef __GPIO_H
#define __GPIO_Hvoid gpio_Init(void);#endif

对于delay基本上都是一样的我这里给大家列出来直接粘贴用就可以

#include "stm32f10x.h"/*** @brief  微秒级延时* @param  xus 延时时长,范围:0~233015* @retval 无*/
void Delay_us(uint32_t xus)
{SysTick->LOAD = 72 * xus;				//设置定时器重装值SysTick->VAL = 0x00;					//清空当前计数值SysTick->CTRL = 0x00000005;				//设置时钟源为HCLK,启动定时器while(!(SysTick->CTRL & 0x00010000));	//等待计数到0SysTick->CTRL = 0x00000004;				//关闭定时器
}/*** @brief  毫秒级延时* @param  xms 延时时长,范围:0~4294967295* @retval 无*/
void Delay_ms(uint32_t xms)
{while(xms--){Delay_us(1000);}
}/*** @brief  秒级延时* @param  xs 延时时长,范围:0~4294967295* @retval 无*/
void Delay_s(uint32_t xs)
{while(xs--){Delay_ms(1000);}
} 

delay.h

#ifndef __DELAY_H
#define __DELAY_Hvoid Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);#endif

mian()

这里我实现了单个灯亮的流水灯和两个灯亮的流水灯,建议大家用数组和循环写

0003是因为我们点亮P0,P1,0011是3

000C是因为点亮P2,P3,1100是C

0018是点亮P3,P4,0000 0000 0001 1000是0x0018

#include "stm32f10x.h"                  // Device header
#include "GPIO.h"  
#include "Delay.h"  int main ()
{gpio_Init();uint8_t A[4]={~0x0003,~0x0006,~0x000c,~0x0018};uint8_t i;while(1){//~(0000 0000 0000 0001)取反是因为低电平点亮,从高到低P15~P0GPIO_Write(GPIOA, ~0x0001);Delay_ms (500);GPIO_Write(GPIOA, ~0x0002);Delay_ms (500);GPIO_Write(GPIOA, ~0x0004);Delay_ms (500);GPIO_Write(GPIOA, ~0x0008);Delay_ms (500);GPIO_Write(GPIOA, ~0x0010);Delay_ms (500);for (i=0;i<4;i++){GPIO_Write(GPIOA, A[i]);Delay_ms (500);	}}
}

标准库的原理明白了其实HAL库也是一模一样的非常简单,主要是流程配置大家可能不会,那我就把具体流程配置都截图出来

HAL库写法

点击FinIsh

2.配置时钟

3.配置GPIO

我们使用GPIOA的0~4,默认高电平

4.设置单独输出.C.H文件

5.ctrl+s生产代码

6.写代码

我没有看到HAL库写寄存器的函数,只有写单独一个引脚的于是:我用关闭所有灯,然后开所有灯的方式进行等效操作,

其实应该GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4,避免改变其他GPIO的值,只是我这里其他GPIO口没使用,我就用GPIO_PIN_All了。

		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(500);

if里面我本想用 ~0x0001;~0x0002去判断,但是不行,编译没错误,但是进不去IF可能是条件不对,于是我就改为1,2,3,4了

int main(void)
{/* USER CODE BEGIN 1 */uint8_t A[4]={1,2,3,4};uint8_t i;/* 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){/* USER CODE END WHILE */HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);HAL_Delay(500);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All , GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);HAL_Delay(500);for(i=0;i<4;i++){if(A[i] == 1){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0|GPIO_PIN_1, GPIO_PIN_RESET);HAL_Delay(500);}else if(A[i] == 2){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);HAL_Delay(500);}else if(A[i] == 3){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);HAL_Delay(500);}else if(A[i] == 4){HAL_GPIO_WritePin(GPIOA, GPIO_PIN_All, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET);HAL_Delay(500);}}/* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

编译运行即可,效果一样

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com