原创博客,如有转载,注明出处——在金华的电子民工林。
引言:基于上一篇说了如何建立一个新工程,管理一个新工程,现在面临着一个问题,我们技术人员接到一个项目,不同的应用,硬件也不同啊,外设,IO口的分配都是不一样的,我们怎么才能不改变底层的情况下给不同的项目配置不同的IO口呢?这个就是我这一篇博客要解决的问题,只有解决了这个问题,我们才能完美的管理各个不同的项目工程。
错误认知一:外设IO的分配只能在main函数里的PIN_init(BoardGpioInitTable);进行配置?而这个函数调用的数组就是在底层的文件上?
释疑:这里只是一个预分配的调用,在我们应用初始化里,还是需要再次初始化IO口。我们可以把底层的配置给全部给注释掉,或者,把这个向量表定义到应用层的文件里去。

const PIN_Config BoardGpioInitTable[] = {//    CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off */
//    CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off */
//    CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low */
//    CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low */
//    CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,  /* External flash chip select */
//    CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN,                                              /* UART RX via debugger back channel */
//    CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL,                        /* UART TX via debugger back channel */
//    CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master out - slave in */
//    CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master in - slave out */
//    CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,                                             /* SPI clock */PIN_TERMINATE
};

原创博客,如有转载,注明出处——在金华的电子民工林。
只留这么个玩意。然后,把IO口的初始化,放到如下位置

IO口的初始化,要放在其他外设初始化之前,切记。
下面就是IO口初始化的程序

#include <stdbool.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/family/arm/m3/Hwi.h>
#include <ti/sysbios/knl/Semaphore.h>
#include <ti/sysbios/knl/Queue.h>#include <ti/sysbios/BIOS.h>#include <ti/drivers/PIN.h>
//#include <ti/drivers/pin/PINCC26XX.h>
#include "board.h"
#include "UserIO.h"PIN_Config CtrPinsCfg[] =
{
PIR_SIGN_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS,          // PIR is active high scanmode
UP_LIMIT_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS,          // Uplimit is active low scanmode
DOWN_LIMIT_IN | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_DIS | PIN_HYSTERESIS,          // Downlimit is active low  scanmodeLIGHT_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MED,       //LED_LAMP initially off  PIN_OPENDRAIN
UV_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_OPENDRAIN | PIN_DRVSTR_MED,       //UV Light initially off  PIN_OPENDRAIN
FAN_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,       //Fan initially off
HOT_CTR_OUT | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MED,       //Hot initially off
PIN_TERMINATE
};PIN_State  CtrPins;
PIN_Handle hCtrPins;void IOCtrInit(void)
{hCtrPins = PIN_open(&CtrPins, CtrPinsCfg);
}

原创博客,如有转载,注明出处——在金华的电子民工林。
把IO口的配置放在这里,很重要的一定,是要在.h里定义IO口的ID,如下是.h里的代码

#include <hal_types.h>
#include <ti/devices/cc26x0r2/driverlib/ioc.h>//IO口自己随意映射到哪个IO口。#define PIR_SIGN_IN      IOID_16
#define UP_LIMIT_IN      IOID_17
#define DOWN_LIMIT_IN    IOID_18#define LIGHT_CTR_OUT    IOID_22
#define UV_CTR_OUT       IOID_23
#define FAN_CTR_OUT      IOID_24
#define HOT_CTR_OUT      IOID_25

上面最重要的是一定要调用ioc.h的头文件,下面的IOID号随便你定义,这样,就能把对IO口的分配,从底层文件分配,改到了应用层的分配,实现了不修改底层,只修改应用层,从容应对各种不同的项目应用。
另外,也可以把main主函数里的 PIN_init(BoardGpioInitTable);里的BoardGpioInitTable这个向量表,修改掉,指向到应用层去。
原创博客,如有转载,注明出处——在金华的电子民工林。

1)友情伙伴:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜BLE之CC2640R2F群:557278427
5)本文出处:原创连载资料《简单粗暴学蓝牙5》
6)完整开源资料下载地址:
https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

CC2640R2F之基础--工程管理篇(下)--外设驱动IO口分配(纯干货)相关推荐

  1. STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口

    STM32F103C8T6驱动舵机SG90 配置定时器TIM2,TIM3,TIM4的多种重映射模式下的不同IO口 1.使用到的工具介绍 2.整个简单介绍 3.程序的介绍 1.使用到的工具介绍: kei ...

  2. STM32F1xx的IO口电压兼容问题以及如何选择对应外设的IO口

    一.如何判断STM32的IO是否兼容5V STM32的IO,绝大部分都兼容5V,至于哪些兼容5V,需要看STM32芯片的数据手册里的引脚描述表,凡是带FT标志的IO口,都是兼容5V的. 对于正点原子的 ...

  3. python语言自学-零基础小白学习Python编程语言的正确姿势(纯干货)

    原标题:零基础小白学习Python编程语言的正确姿势(纯干货) 敢问有哪种编程语言集简洁.优雅.简单.全能于一身?Python绝对算的上是一个.举个例子,比如完成同一个任务,C语言需要写1000行代码 ...

  4. Simplicity Studio V5 建立一个空工程后如何添加外设驱动

    默认生成工程自带的驱动就这么多. 这些都可以根据自己需求添加.下面我们添加i2c,IADC,LDMA三个. 这里多出了三个文件:em_i2c.c.em_iadc.c.em_ldma.c,这就是自己添加 ...

  5. 倒梁法matlab,柱下条形基础等基础工程.ppt

    1,基础工程,电子教案,研制单位:湖南大学土木工程学院,2,3.柱下条形基础.筏形和箱形基础,3,3.1概述,优点:埋深较大.可提高地基承载力.增大基础抗滑稳定性.并可利用补偿作用减小基底附加应力.减 ...

  6. location驱动包_Zynq SDK 驱动探求(三):论一个外设驱动的全部身家·Xilinx SDK 驱动源码结构...

    Processor is ready. Configure programable logic. 在新专栏 Rapid TCP/IP on Zynq 中,将围绕 Xilinx Zynq 系列芯片,从 ...

  7. 这款开源的STM32外设驱动库,可以直接拿来用!

    软件一行,经常需要用到很多重复的代码,我们有必要花一些时间整理一些常用的.通用的代码,等到用到的时候就可以直接拿来用了.如果没有精力自己去整理,也可以用一些网上比较成熟的代码. 比如本次介绍的基于ST ...

  8. 基础篇010.2 STM32驱动RC522 RFID模块之二:STM32硬件SPI驱动RC522

    目录 1. 实验硬件及原理图 1.1 RFID硬件 1.2 硬件原理图 2. 单片机与RFID硬件模块分析 3. 利用STM32CubeMX创建MDK工程 3.1 STM32CubeMX工程创建 3. ...

  9. 一份很棒的外设驱动库!(基于STM32F4)

    关注.星标公众号,直达精彩内容 来源:https://www.lmlphp.com/user/1774/article/item/19294/ 编辑整理:技术让梦想更伟大 | 李肖遥 本次分享一份基于 ...

最新文章

  1. acm经典题Mark
  2. iPhone OS框架 介绍
  3. PHP优于Node.js的五大理由
  4. 前端学习(1779):前端调试之cache原理和查看
  5. mysql查询后调用mysql_free_result_怎么释放_关于mysql_free_result和mysql_close的解惑
  6. Android单元测试 mock Context,mock静态类的静态方法,测试方法的顺序
  7. url,href,src区别
  8. java cmd测试_Java SE 9:使用CMD提示开发和测试简单模块(第3部分)
  9. html标签种类很多,为什么不都用div?
  10. python冰雪奇缘使用教程_99 行 Python 代码实现《冰雪奇缘》特效?网友:大神碉堡!...
  11. 开发Connext DDS传输插件不用求人,看这一篇就够了
  12. hmcl支持java7吗_求助。用HMCL下载1.7.10的问题
  13. 脱壳实践之寻找OEP——堆栈平衡法
  14. poi操作ppt创建表格
  15. 过了技术面却在HR面被刷?必备40问!从容应对HR,斩获N多大厂offer!
  16. candence pcb走线等长_PCB走线角度选择 - PCB Layout 跳坑指南 - 吴川斌的博客
  17. 文件上传漏洞-原理篇
  18. dialog弹框通过自定义指令实现可拖拽位移功能
  19. 文末送书丨深度解读,人是如何在一瞬间理解语言的?
  20. 烤仔观察 | 哈耶克最后的预言

热门文章

  1. 微码汇:从O2O的前世今生看接下来该如何“O”
  2. 算例在线帮 | 某型无厚度翅片水冷板散热的Fluent仿真分析
  3. python 柱状图折线图共用一个图例_使用python的seaborn绘制折线图与柱状图的组合图...
  4. Xamarin for android 小白教程-HelloWorld !
  5. 2023年湖北初级职称(助理工程师)怎么申报?需要什么材料?启程
  6. 9.foreign key(外键)
  7. 守护线程setDaemon的理解
  8. 人类实体瘤临床细胞状态和生态系统图谱(EcoTpyer)
  9. 颜值为王 美图M8成京东618新机好评榜最大黑马
  10. 发字的楷书写法图片_优秀的楷体书写作品高清图片