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

廊坊网站建站东莞化妆品网站建设

廊坊网站建站,东莞化妆品网站建设,wordpress 快递插件,烟台建站模板源码目录 前言 HAL库对GPIO的抽象 核心分析#xff1a;HAL_GPIO_Init 前言 我们终于到达了熟悉的地方#xff0c;对GPIO的初始化。经过漫长的铺垫#xff0c;我们终于历经千辛万苦#xff0c;来到了这里。关于GPIO的八种模式等更加详细的细节#xff0c;由于只是点个灯HAL_GPIO_Init 前言 我们终于到达了熟悉的地方对GPIO的初始化。经过漫长的铺垫我们终于历经千辛万苦来到了这里。关于GPIO的八种模式等更加详细的细节由于只是点个灯我们不做所有的分析。 HAL库对GPIO的抽象 HAL库对GPIO的抽象可以说是到了一个巅峰。使能一个GPIO被化简到了一个非常显然的步骤。 使能对应GPIO所在的Port的时钟 设置GPIO对应的模式——点灯的时候我们是推挽强力的控制外设 使用HAL_GPIO_Init函数注册到寄存器当中 做一些Post Init工作。比如说我们明确的要求拉高拉低GPIO。这个需要根据外设电路来实现 以我板子上外接的PA9作为一个例子把 static void __open_gpioclk(){__HAL_RCC_GPIOF_CLK_ENABLE(); } ​ CCGPIOInitTypeDef led0_init {.type {.Pin     GPIO_PIN_9,.Mode   GPIO_MODE_OUTPUT_PP,.Speed   GPIO_SPEED_HIGH,.Pull   GPIO_PULLUP},.open_clock __open_gpioclk,.post_init   __post_init,.port GPIOF }; ​ void configure_ccgpio(CCGPIOType* type,  CCGPIOInitTypeDef* initer) {type-port initer-port;type-pinType initer-type.Pin; ​// oh shit, the open clock is missing initediniter-open_clock ? initer-open_clock() : __die(); ​HAL_GPIO_Init(type-port, initer-type); ​if(initer-post_init) initer-post_init(type); } 核心分析HAL_GPIO_Init 我们只是简单的点个灯这个函数就可被化简为如下的逻辑 void HAL_GPIO_Init(GPIO_TypeDef  *GPIOx, GPIO_InitTypeDef *GPIO_Init) {uint32_t position;uint32_t ioposition 0x00U;uint32_t iocurrent 0x00U;uint32_t temp 0x00U; ​/* 检查参数 */assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));assert_param(IS_GPIO_PIN(GPIO_Init-Pin));assert_param(IS_GPIO_MODE(GPIO_Init-Mode)); ​/* 配置GPIO引脚 */for(position 0U; position GPIO_NUMBER; position){/* 获取IO引脚位置 */ioposition 0x01U position;/* 获取当前IO引脚的状态 */iocurrent (uint32_t)(GPIO_Init-Pin) ioposition; ​... ​/* 配置引脚为高电平来点亮LED */GPIOx-ODR | iocurrent; // 设置为高电平}} } 这就是为什么我们可以使用Pin9 | Pin10完成我们的组操作因为内部我们是逐个比特的完成我们对GPIO的设置对于每一个满足——的确是我们要设置的GPIO if(iocurrent ioposition){/* --------------------- GPIO模式配置 ------------------------*//* 仅当输出模式时才需要配置 */if(((GPIO_Init-Mode GPIO_MODE) MODE_OUTPUT)){/* 配置IO速度 */assert_param(IS_GPIO_SPEED(GPIO_Init-Speed));temp GPIOx-OSPEEDR;temp ~(GPIO_OSPEEDER_OSPEEDR0 (position * 2U));temp | (GPIO_Init-Speed (position * 2U));GPIOx-OSPEEDR temp; ​/* 配置IO输出类型 */temp GPIOx-OTYPER;temp ~(GPIO_OTYPER_OT_0 position);temp | (((GPIO_Init-Mode OUTPUT_TYPE) OUTPUT_TYPE_Pos) position);GPIOx-OTYPER temp; ​/* 配置IO输出模式 */temp GPIOx-MODER;temp ~(GPIO_MODER_MODER0 (position * 2U));temp | ((GPIO_Init-Mode GPIO_MODE) (position * 2U));GPIOx-MODER temp;} 也就是说设置我们的输出类型是下面的 上拉是指在GPIO引脚与电源通常是3.3V或5V之间连接一个电阻这样当引脚处于输入状态时如果没有外部信号驱动该引脚它会自动被拉到高电平。也就是被高电平拽上去了 下拉是指在GPIO引脚与地0V之间连接一个电阻这样当引脚处于输入状态时如果没有外部信号驱动该引脚它会自动被拉到低电平。也就是被低电平拽下去了 无上下拉配置意味着不连接任何上拉或下拉电阻。当GPIO引脚处于输入模式时它的电平状态将取决于外部电路。如果没有外部驱动信号这个引脚将处于浮空状态Hi-Z可能会导致电平不稳定容易受到噪声干扰。 中的一种。至于GPIO的速度则是分为低速中速高速。我们的输出模式大致分两种 推挽输出Push-pull这种输出类型意味着GPIO引脚可以驱动电流流向负载并且在输出高电平和低电平时都会主动提供电流。即引脚会主动拉高电平和拉低电平。它是最常用的输出类型。 开漏输出Open-drain这种输出类型意味着GPIO引脚只有在输出低电平时才会提供电流拉低电平而在输出高电平时它不会输出电流而是处于高阻态Hi-Z。通常需要外部上拉电阻来将引脚拉到高电平。你会在使用软件IIC的时候再看到它。 所以笔者按照给出的这个原理图配置为上拉的情况确保初始化后不会立马被点亮。 很好现在我们终于来到了点灯 set_ccgpio_state(led0, CCGPIO_LOW); ​ void set_ccgpio_state(CCGPIOType* type, CCGPIOState state) {HAL_GPIO_WritePin(type-port, type-pinType, (state ? (GPIO_PIN_SET) : (GPIO_PIN_RESET))); } 此时此刻我们的GPIO就会被拉到低形成一个高低的电压差存在的电流就把我们的LED导通了
http://www.dnsts.com.cn/news/100295.html

相关文章:

  • 一个门户网站源码做网站推广一年多少钱
  • 支付集成文件放在网站哪里成品影视app开发制作
  • 双公示网站专栏建设wordpress 分类列表页
  • 哪家公司建站比较好做团购网站需要什么资质
  • 专注软件优化分享的网站网站还没有建好可以备案吗
  • 网络公司建网站一个网站的优势有哪些
  • 长沙网站建设大概多少钱网站屏蔽中国ip
  • 哪个网站可以做360度评估国内网站排名
  • 网站主机是什么如何制作h5做网站
  • 网站做飘浮怎么做如何查询logo是否已经被注册
  • 网站建设用什么程序语言网易企业邮箱收费版
  • 有什么做美食的视频网站wordpress找不到自定义栏目
  • 建网站必须要服务器吗长春财经学院学费
  • 设计网站源码网站设计中国内优秀企业网站欣赏
  • 绍兴市网站建设php网站开发试卷
  • 女朋友做网站郑州企业网站制作
  • 河北 建设厅网站首页做收款二维码的网站
  • 西安西部数码备案网站培训机构网络推广方案
  • 广州网站建设服务公司qq企业邮箱 wordpress
  • 网站策划案范文网站如何快速被
  • 公司网站想维护服务器logo免费下载网站
  • 无锡网页网站制作公司免费制作企业小程序
  • 汕头市公司网站建设平台做国外单的网站叫什么名字
  • HTML网站页面建设太原市网站建设网站
  • 用html5做的旅游网站代码免费注册跨境电商
  • 门户网站开发哪家好wordpress 4.0 打开慢
  • 免费注册建网站茄子河区网站建设自查报告
  • 家居公司网站建设方案ppt网站的做网站公司哪家好
  • 建设网站有哪些问题手工制作贺卡简单又漂亮
  • 南昌微信公众号开发邵武网站建设wzjseo