原创博客,如有转载,注明出处——在金华的电子民工林。
引言:基于上一篇说了如何建立一个新工程,管理一个新工程,现在面临着一个问题,我们技术人员接到一个项目,不同的应用,硬件也不同啊,外设,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. Chapter 9:Noise-Estimation Algorithms
  2. Wing IDE Pro (Wing pro 6.0) for Ubuntu/linux
  3. SAP MM 公司间退货STO流程后勤部分简述
  4. Object #HTMLCanvasElement 的drawImage没有作用的原因
  5. 20160512关于mac安装caffe的记录
  6. Author Topic Model[ATM理解及公式推导]
  7. 配置主机间信任的一个简单办法
  8. 如何在 macOS Monterey 正式发布之前备份您的 Automator 作品?
  9. gdb调试出现optimized out解决方法
  10. 拓展题 系列I之科普系列
  11. 详解 Redis 中布隆过滤器解决缓存穿透问题
  12. 【歌词】ASIAN KUNG-FU GENERATION - ムスタング(mix for 芽衣子)
  13. KaLi Linux 2019.2安装netspeed
  14. 喜讯|云畅科技上榜湖南省上市后备企业名单
  15. 【iOS】This operation can fail if the version of the OS on the device is incompatible
  16. 【论文阅读】DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting
  17. 淘宝API卖家/买家相关接口列表与说明
  18. 什么能吃,什么不能吃
  19. CTF_Web:从0学习Flask模板注入(SSTI)
  20. ubuntu16.04 安装 oracle11g (2022.6.5)

热门文章

  1. php 日期相减获得天数,PHP两个日期相减 计算天数、月、年[Stack Overflow]
  2. 吹筒仔海钓纪实,来自陆丰陆丰公众号
  3. 图像的剪切(crop)matlab
  4. 2021-10-18_windows实时查看Nvidia显卡使用情况
  5. 极流行的四型人格分类,你是哪一种?
  6. 4.jetson更换python版本
  7. 你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展
  8. vue跳转新页面链接以及url 转码
  9. 如何写出难以维护的代码--代码命名
  10. 机智云AIoT开发平台,物联网开发和运营从未如此简单