首页 > 其他分享 >STM32GPIO操作底层解析

STM32GPIO操作底层解析

时间:2024-08-31 14:22:31浏览次数:12  
标签:STM32GPIO Pin GPIOx PIN param assert GPIO 解析 底层

我们使用HAL 和 标准库时,常常忽略他两的底层,只知道怎么用不知其原理,其实是大忌,因为底层丢了代码的灵魂就丢了,对以后的Linux开发不利

常用的指令函数:

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_BIT_ACTION(BitVal)); 
  
  if (BitVal != Bit_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BRR = GPIO_Pin;
  }
}
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}

/**
  * @brief  Clears the selected data port bits.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_Pin: specifies the port bits to be written.
  *   This parameter can be any combination of GPIO_Pin_x where x can be (0..15).
  * @retval None
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;
}

 他们的底层都是操作BBR  BSRR寄存器

凭借他们的置其中一位却不干扰其他位的功能可以把引脚输出调整

assert_param()是参数检查函数现在没用到不管他

标签:STM32GPIO,Pin,GPIOx,PIN,param,assert,GPIO,解析,底层
From: https://blog.csdn.net/2301_80317247/article/details/141752165

相关文章

  • B端产品经理全解析:职责、技能与成长路径
    B端产品经理中的“B”代表“Business”,即商业。这一职位的核心在于深入理解其重要性,并设计出更贴合项目需求的产品方案。在数字化转型的大潮中,B端产品经理作为连接企业需求与技术实现的桥梁,扮演着举足轻重的角色。他们不仅需要深入洞察企业的业务流程与痛点,还需将这些需求转化......
  • 【大模型理论篇】RoPE旋转位置编码底层数学原理分析
    1.位置编码对于NLP模型的作用             位置编码(PositionalEncoding)在大模型(例如Transformer架构)中起到了非常重要的作用。没有位置编码的信息,模型会丧失序列的顺序信息,导致模型退化成一个简单的“词袋模型”(BagofWordsmodel)。        在Tra......
  • Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图
    一、前言说明地址和经纬度坐标转换的功能必须在线使用,一般用在导航需求上,比如用户输入起点地址和终点地址,查询路线后,显示对应的路线,而实际上各大地图厂家默认支持的是给定经纬度坐标来查询(百度地图支持传入地址),但是你让用户输入经纬度坐标是不可能的,他肯定不可能知道怎么去拿到这......
  • CSP-J 2020 初赛试题解析(第一部分:单项选择题(5-10))
    ......
  • 【C语言进阶】C语言指针进阶实战:优化与难题解析
    ......
  • POLIR-Society-Management-管理: Networking 与 矩阵解析: 动机、思考与表达 和 利益、
    POLIR-Society-Management-CNO5R+Leading:管理Leading(引领工作)的几个要点:立场(目标人群)+金钱价值观+需求+服务产品+管理控制_复杂和不确定性领导力{做人做事思想}+管理{三管五带七抓}PeterDruke(披特•德鲁克):正确与他人建立关系的顺序:先展现力量,接着表明原则,最后......
  • 【信息收集】网络空间测绘FOFA,查询语法最全使用方法(图文解析)
    高级搜索基础类别标记类(SpecialLabel)协议类(type=service)网站类(type=subdomain)证书类地理位置(Location)时间类(Lastupdatetime)独立IP语法(独立IP系列语法,不可和上面其他语法共用)查询基础语法案例html搜索title标题搜索domain域名搜索host主机名搜索o......
  • 【CDN安全】解析工作机制+CDN绕过技巧全解析
    一、CDN工作原理简析1.1用户请求1.2DNS解析到CDN节点1.3CDN节点处理1.4内容呈现1.5安全切入点二、绕过技巧大揭秘2.1历史DNS记录挖掘2.2子域名枚举+爆破2.3邮件头分析大法2.4SSL证书情报收集2.5文件引用分析......
  • 详细了解ThreadLocal底层原理及作用
    深入ThreadLocal底层原理一、ThreadLocal的作用二、ThreadLocal的底层原理三、可能存在的问题四、总结一、ThreadLocal的作用ThreadLocal是Java中一个用于实现线程局部变量的类。它的主要作用是在每个线程中创建一个变量的副本,这样每个线程可以独立地访问自己的副本......
  • MySQL索引底层结构为什么用B+Tree?
    索引为何不选择二叉树?二叉搜索树是遵守二分搜索法实现的一种数据结构,它具有下面特点:任意节点的左节点不为空时,左节点值小于根节点值;右节点不为空时,右节点值大于根节点值;依次存入数据,如果数据是递增的,则原二叉树退化为链表结构 从动画中可以明显看到,需要经过5次查询才能......