This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号:MSP432P4011
您好!
刷写 MSP-EXP432P4111 (SWD)时没有问题、但使用 MSP432P4011绑定定制板时确实有问题。 具有六个 PCB 的闪存首次成功、第一次成功。 我们使用包括 MSP432P4011RGC 在内的最小组件组装了1个 PCB (请参阅图片)。 这个只成功了一次! PCB 为2层(顶层-底层)、编程使用 SWD 来完成! 原因可能是什么? UniFlash 第一次无法识别芯片! 软件中没有用于"锁定"芯片的代码! 还有一点令人困惑的是、这些引脚的手动状态上拉和下拉、但 MSP-EXP432P4111似乎没有?
请提供建议? 这是软件问题还是硬件问题(4层中的2层)
我们可以通过某种方式擦除芯片、然后重试闪存吗?
您好、不完全是、我使用 MSP432P4111的源代码作为模板、并添加/修改/修改了新的板级文件、以套件 msp432p4011。 当然、我无法验证我是否正确执行了所有这些操作、因为我没有什么可与之比较的!
回想一下、首次编程似乎成功了、它甚至在'main'打开了调试。 第二次它不再识别芯片! VCORE 在 VCC=3V3时的测量值为59、5mV。
此外、使用 UniFlash (版本5.1.0)不会带来拯救!
此致、Laurent
我假设 VCORE 具有您第一次达到 main 的预期电压?
不确定这是否会产生实际影响、但如果您使用 的是 MSP432P4011、为什么您从 MSP432P4111 文件开始?
因为没有来自 msp432p4011的样片。 由于这些处理器非常相似、4011是4111、没有 LCD! 但是、我确实注意到、在这种情况下需要更改多个文件。 那么、您是否建议创建一个空的4011项目、然后将所有应用程序文件从4111传输到4011项目?
我看到 VCORE (引脚9)非常低、大约为3 - 59、5mV、我猜会这么低? 如果我查看参考手册表5-19、这一切都将变低!
我使用向导只使用 main.c 创建了最小的 empty 的"new CCS project"。 目前还不幸运!
您能否突出显示您实际安装在电路板上的组件?
大家好、只有方形中的所有组件都被称为"主 uC"。 左上方的上拉/下拉均为100k
-要排除大多数潜在的代码问题、您是否能够从 MSP432P4011 SDK (http://dev.ti.com/tirex/explore/node?node=AAOYIurCTJ8LLIFxOLzTng__z-lQYNj__LATEST&search=debug)中运行空示例、并查看您是否在其中看到相同的结果。
但我想这是一个硬件问题。 VCORE 应为1.2V 或1.4V、具体取决于模式等、这表示焊接可能不是最佳。 零部件是由装配体安装还是由您在内部安装?
您是否能够在电路板上进行探测、以查看您是否在其他引脚上具有预期的电压?
我们将进行此练习! 明天回来!
大家好、如果我尝试在 MSP-EXP432P4111-Launchpad 上运行该工具、该工具会很好地指示其 MCU 在实际中命名 MSP432P4111的错误。 如果我尝试在我们的定制硬件上运行、我会遇到一个无法识别目标的错误! 明天、我们将组装一个非常精确的新 PCB、看看会发生什么情况!
我们为 MCU 4011创建了一个具有最低硬件的新电路板。 当我连接到 MSFET+Adptr 并运行 Uniflash 时、它确实识别了 MSP432P4011。 在此过程中、我检查了 VCORE 为1.22V、我猜这是可以的! 但是、SWDIOTMS 和 SWCLKTCK 的上拉和下拉电阻卡在1、66V。 我们设法使用 CCS 进行下载、但当我们单步执行代码时、它会在第二步后"挂起"。 之后不再连接、也无法识别! 我们使用 PT=260C 的红外焊接30秒 实际测量 T = 245C。
上拉/下拉电阻器的值应该是多少? TI 没有提供任何价值? 我们是否应该使用上拉/下拉?
我们也对 表6-87 vesrus 表4-5感到困惑。
稍后回来、首先尝试查看 MCU 是否已"锁定"
此致、Laurent
这里、我们再次制作了"样条"板、以使事情正常工作! 未安装其它组件。 电源为外部3V3。 如果使用 MSP-FET + ADPTR、则开关设置为"感应"。
从这一点出发、我们需要知道:
1) 1)是否需要左上角的电阻器(SWDIO、SWCLK 和 TDO_SWO)? 如果是、有什么价值?
2) 2)首次上电后、在任何闪存之前、我们测量 VCORE = 1、22V。 是这样吗?
3) 3)是否可以是在首次刷写后加载 MCU 的软件? 如果我们是第一次启动调试会话、然后尝试单步执行、我们会发现问题。 第二步后、它崩溃、我们无法再连接! VCORE 在这之后只有几 mV、每次启动!
Regads、Laurent
1) 1)阅读 http://www.ti.com/lit/ds/symlink/msp432p4111.pdf 中的注释至6.12.24。 从原理图中可以看到、只有 R5安装了一个10k
2) 2)是的
3) 3)听起来有点奇怪。 无论您尝试调试的程序如何、都会发生这种情况吗? 如果您尚未使用 SDK 中的空示例进行测试、请使用该示例。
可能会有所帮助的地方! 我们使用了具有以下设置的 IR 焊接系统:
-3C/秒上升至180C (最高浸泡设置)并保持90秒。
-上升至 PT 260C 并保持30秒(测得的峰值温度约为245C)
-用6C/S 冷却至50°C
在上一个 PCB 之前、我们今天进行了测试、然后测试了:
-connect GND
-connect 3V3
测量 VCORE --> 1.22V
UniFlash 识别 MCU -> MSP432P4011
能够闪存、但在闪存后 VCORE = 12MV
我们今天做的最后一个 PCB、然后进行了测试:
-connect GND
-connect 3V3
测量 VCORE --> 10mV
UniFlash 无法识别 MCU
此致、Laurent
无论您尝试调试的程序如何、都会发生这种情况吗? 据我所知、不能在软件中关闭 Vcore (因为 MCU 在此电源上运行)
或者、您是否可以意外地尝试打开直流/直流转换器、并且由于 VSW Pn 未连接、因此您不会获得任何电压? LDO 和 DCDC 并联放置、但如果选择了 DCDC、我不知道 LDO 是否已开启。
嗯、我认为这是一个真正的问题! 我还注意到、仅焊接组件后、使用 IR 焊接轨迹< 260C 时、VCORE 仍可< 10mV、就像使用3V3为 MTU 加电一样。 我注意到包含这些 MCU 的袋子已于2018年4月20日关闭、并于2019年4月1日由我们打开! 全部原因可能是在125°C 的温度下、8小时内未烘烤!
PS:我想、如果您想使用直流/直流转换器、您需要在软件中进行配置吗? 默认不是! 是这样吗?
此致、
劳伦特
是的、使用 DCDC 需要软件设置。 我提到它的原因是、如果您在闪存之前和闪存之后具有正确的 Vcore、这可能是(获取得太远)原因
如果您使用预制的器件安装电路板、我们期待您的结果。 我在 CC1120上使用的第一个数据包上看到了类似的问题、需要进行预烘烤。
大家好、今天我们试了一款"烘焙"的 msp432p4011IRGC (64引脚)、结果是一样的! CCS 识别芯片、连接、下载代码并启动调试器以等待'main'。 我们已断开连接、无需执行任何进一步的调试操作。 结果是无法再次进行连接、VCORE 变为3、36mV。 不过、我们可以提及"新"芯片与之前的芯片批次相同、日期为2018年4月20日! 我们使用的电路板(PCB)仅装配了 msp432p4011所需的组件。 该项目基于 SDK MSP432 3.30.0.13和 BLE 插件3.20.0.24中的'OAD_firmware_update_MSP432P4111_tirtos_ccs'。 此外、还对板文件进行了调整
明天我们希望收到另一批"新"芯片! 我们将重试。
此致、
劳伦特
大家好、我们已经达到了可以重复编程和调试 HF/LF 示例的状态。 我对 custom_MSP432P4011.c/.h 和 Board.h 进行了多处更改 我放弃了所有不使用/不需要的东西。 正如我在 syscgf 中看到的、仅配置了使用的内容。 这是正确的方法吗?
我包含符合先前发送原理图 的文件、有人可能会看到其他错误?
使用预定义的"_RGC_PKG_"为 MSP432P4011构建、否则为"x_RGC_PKG_" MSP-EXP432P4111 LaunchPad。
"板.h"
/*
*版权所有(c) 2017、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
/**========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*@文件 MSP432P4011.h
*
*@MSP432P4011特定于电路板的 API 简介
*
* MSP432P4011头文件应包含在应用程序中、如所示
*如下:
*@代码
*#include
*@尾码
*
*====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*
#ifndef __MSP432P4011_H
#define __MSP432P4011_H
#ifdef __cplusplus
extern "C"{
#endif
MSP432P4011上的/* LED 为高电平有效。 *
#define MSP432P4011_GPIO_LED_OFF (0)
#define MSP432P4011_GPIO_LED_ON (1)
/*!
*@def MSP432P4011_GPIOName
*@MSP432P4011开发板上 GPIO 名称的简要枚举
*
#ifndef _RGC_PKG_
typedef 枚举 MSP432P4011_GPIOName{
MSP432P4011_GPIO_S1 = 0、
MSP432P4011_GPIO_S2、
MSP432P4011_BLE_SRDY、
MSP432P4011_BLE_MRDY、
MSP432P4011_BLE_RESET、
MSP432P4011_GPIO_LED1、
MSP432P4011_GPIO_RGBLED_RED、
MSP432P4011_GPIO_RGBLED_GREEN、
MSP432P4011_GPIO_RGBLED_BLUE、
MSP432P4011_GPIOCOUNT
} MSP432P4011_GPIOName;
其他
typedef 枚举 MSP432P4011_GPIOName{
MSP432P4011_BLE_SRDY、
MSP432P4011_BLE_MRDY、
MSP432P4011_BLE_RESET、
MSP432P4011_GPIO_TP14、
MSP432P4011_GPIO_TP15、
MSP432P4011_GPIOCOUNT
} MSP432P4011_GPIOName;
#endif
/*!
*@def MSP432P4011_I2CName
*@MSP432P4011开发板上 I2C 名称的简要枚举
*
typedef 枚举 MSP432P4011_I2CName{
#ifndef _RGC_PKG_
MSP432P4011_I2CB0 = 0、
MSP432P4011_I2CB1、
其他
MSP432P4011_I2CB0 = 0、
#endif
MSP432P4011_I2CCOUNT
} MSP432P4011_I2CName;
/*!
*@def MSP432P4011_I2CSlaveName
*@MSP432P4011开发板上 I2CSlave 名称的简要枚举
*
typedef enum MSP432P4011_I2CSlaveName{
MSP432P4011_I2CSLAVEB0 = 0、
MSP432P4011_I2CSLAVECOUNT
} MSP432P4011_I2CSlaveName;
/*!
*@def MSP432P4011_NVSName
*@MSP432P4011开发板上 NVS 名称的简要枚举
*
typedef 枚举 MSP432P4011_NVSName{
MSP432P4011_NVSMSP4320 = 0、
MSP432P4011_NVSMSP4321 = 1、
MSP432P4011_NVSCOUNT
} MSP432P4011_NVSName;
/*!
*@def MSP432P4011_SDFatFName
*@MSP432P4011开发板上 SDFatFS 名称的简要枚举
*
typedef enum MSP432P4011_SDFatFName{
MSP432P4011_SDFatFS0 = 0、
MSP432P4011_SDFatFSCOUNT
}MSP432P4011_SDFatFName;
/*!
*@def MSP432P4011_SDName
*@MSP432P4011开发板上 SD 名称的简要枚举
*
typedef 枚举 MSP432P4011_SDName{
MSP432P4011_SDSPI0 = 0、
MSP432P4011_SDCOUNT
} MSP432P4011_SDName;
/*!
*@def MSP432P4011_SPIName
*@MSP432P4011开发板上 SPI 名称的简要枚举
*
typedef enum MSP432P4011_SPIName{
MSP432P4011_SPIB0 = 0、
MSP432P4011_SPIB2、
MSP432P4011_SPIB3、
MSP432P4011_SPIB4、
MSP432P4011_SPICOUNT
} MSP432P4011_SPIName;
/*!
*@def MSP432P4011_UARTName
*@MSP432P4011开发板上 UART 名称的简要枚举
*
typedef 枚举 MSP432P4011_UARTName{
MSP432P4011_UARTA0 = 0、
#ifdef _RGC_PKG_
MSP432P4011_UARTA1、
#endif
MSP432P4011_UARTA2、
MSP432P4011_UARTCOUNT
}MSP432P4011_UARTName;
/*!
*@def MSP432P4011_WatchdogName
*@MSP432P4011开发板上看门狗名称的简要枚举
*
typedef enum MSP432P4011_WatchdogName{
MSP432P4011_Watchdog = 0、
MSP432P4011_WATCHDOGCOUNT
} MSP432P4011_WatchdogName;
/*!
*@简要初始化通用板特定设置
*
*此函数用于初始化通用板特定设置。
*
extern void MSP432P4011_initGeneral (void);
#ifdef __cplusplus
}
#endif
#endif /*__MSP432P4011_H */
----------------------------------------------------------------------
custom_MSP432P4011.c
/*
*版权所有(c) 2017、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*
/*
*==== MSP432P4011.c ===
*此文件负责为设置特定于电路板的项目
* MSP432P4011电路板。
*
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#if defined (__TI_Compiler_version__)
#pragma DATA_ALIGN (dmaControlTable、256)
#Elif defined (_IAR_systems_icc_)
#pragma DATA_alignment=256
#Elif defined (_GNU_)
__attribute__((对齐(256)))
#endif
静态 DMA_ControlTable dmaControlTable[16];
/*
*==== dmaErrorHwi ====
*这是 uDMA 错误中断的处理程序。
*
静态空 dmaErrorHwi (uintptr_t arg)
{
int status = map_dma_getErrorStatus();
map_dma_clearErrorStatus();
/*禁止未使用的变量警告*/
(无效)地位;
while (1);
}
UDMAMSP432_Object udmaMSP432Object;
CONST UDMAMSP432_HWAttrs udmaMSP432HWAttrs ={
.controlBaseAddr =(void *) dmaControlTable、
.dmaErrorFxn =(UDMAMSP432_ErrorFxn) dmaErrorHwi、
.intNum = INT_DMA_ERR、
.intPriority =(~0)
};
CONST UDMAMSP432_Config UDMAMSP432_CONFIG ={
.object = udmaMSP432Object、
hwAttrs =&udmaMSP432HWAttrs
};
/*
*========================================= Display =================================================
*
#include
#include
#define MAXPRINTLEN 1024
DisplayUart_Object displayUartObject;
静态 char displayBuf[MAXPRINTLEN];
const DisplayUart_HWAttrs displayUartHWAttrs ={
#ifndef _RGC_PKG_
uartIdx = MSP432P4011_UARTA0、
其他
uartIdx = MSP432P4011_UARTA2、
#endif
.budrate = 115200、
.mutexTimeout =(unsigned int)(-1)、
strBuf = displayBuf、
strBufLen = MAXPRINTLEN
};
#ifndef Board_display_use_uart_ansi
#define Board_display_use_UART_ANSI 0
#endif
const Display_Config Display_config[]={
{
# IF (Board_display_use_uart_ansi)
.fxnTablePtr =&DisplayUartAnsi_fxnTable、
# else /*默认为最小 UART、不放置光标*/
.fxnTablePtr =&DisplayUartMin_fxnTable、
# endif
.object =显示 UartObject (&D)、
hwAttrs =&displayUartHWAttrs
}
};
const uint_least8_t Display_count = sizeof (Display_config)/sizeof (Display_Config);
/*
*==== MSP432P4011_initGeneral ===
*
void MSP432P4011_initGeneral (void)
{
power_init();
}
/*
*========================================= GPIO ===========================================
*
#include
#include
/*
*引脚配置阵列
*注意:引脚配置的顺序必须与之前的顺序一致
*在 MSP432P4011.h 中定义
*注意:不用于中断的引脚应放置在的末尾
*数组。 回调数组到的回调条目可以省略
*减少内存使用。
*
GPIO_PinConfig gpioPinConfigs[]=
{
#ifndef _RGC_PKG_
/*输入引脚*/
/* MSP432P4011_S1 *
GPIOMSP432_P1_1 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、
/* MSP432P4011_S2 */
GPIOMSP432_P1_4 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_RISING、
/* MSP432P4011_SRDY */
GPIOMSP432_P2_5 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_HIGH、
/* MSP432P4011_MRDY */
GPIOMSP432_P6_0 | GPIO_CFG_IN_pu、
/* MSP432P4011_RESET */
GPIOMSP432_P6_7 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_HIGH、
/*输出引脚*/
/* MSP432P4011_LED1 */
GPIOMSP432_P1_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_LOW、
/* MSP432P4011_RGBLED_RED */
GPIOMSP432_P2_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_LOW、
/*
* MSP432P4011_LED_GREEN 和 MSP432P4011_LED_BLUE 用于
* PWM 示例。 如果要控制、请取消注释以下行
*使用 GPIO 驱动程序的 LED。
*
/* MSP432P4011_RGBLED_GREEN *
GPIOMSP432_P2_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_LOW、
/* MSP432P4011_RGBLED_BLUE */
GPIOMSP432_P2_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_LOW、
其他
/* MSP432P4011_SRDY TP11 */
GPIOMSP432_P1_5 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_HIGH、
/* MSP432P4011_MRDY TP12 */
GPIOMSP432_P8_0 | GPIO_CFG_IN_pu、
/* MSP432P4011_BLE_RESET */
GPIOMSP432_P1_4 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH
| GPIO_CFG_OUT_HIGH、
/* MSP432P4011_GPIO_TP14 */
GPIOMSP432_PJ_4 | GPIO_CFG_OUTPUT | GPIO_CFG_OUT_STR_LOW
| GPIO_CFG_OUT_HIGH、
/* MSP432P4011_GPIO_TP15 */
GPIOMSP432_P7_3 | GPIO_CFG_OUTPUT | GPIO_CFG_OUT_STR_LOW
| GPIO_CFG_OUT_HIGH、
#endif
};
/*
*回调函数指针数的数组
*注意:引脚配置的顺序必须与之前的顺序一致
*在 MSP432P4011.h 中定义
*注意:在到的回调数组中可以省略不用于中断的引脚
*减少内存使用量(如果放置在 gpioPinConfigs 数组的末尾)。
*
GPIO_CallbackFxn gpioCallbackFunctions[]=
{
#ifndef _RGC_PKG_
/* MSP432P4011_S1 *
null、
/* MSP432P4011_S2 */
null、
/* MSP432P4011_SRDY */
null、
/* MSP432P4011_MRDY */
null、
/* MSP432P4011_RESET */
null、
/* MSP432P4011_LED1 */
null、
/* MSP432P4011__RGBLED_RED */
null、
/* MSP432P4011_RGBLED_GREEN *
null、
/* MSP432P4011_RGBLED_BLUE */
null
其他
/* MSP432P4011_SRDY */
null、
/* MSP432P4011_MRDY */
null、
/* MSP432P4011_BLE_RESET */
null、
/* MSP432P4011_GPIO_TP14 */
null、
/* MSP432P4011_GPIO_TP15 */
null
#endif
};
CONST GPIOMSP432_Config GPIOMSP432_CONFIG ={
.pinConfigs =(GPIO_PinConfig *) gpioPinConfigs、
.callback =(GPIO_CallbackFxn *) gpioCallbackFuncions、
numberOfPinConfigs = sizeof (gpioPinConfigs)/sizeof (GPIO_PinConfig)、
numberOfCallbacks = sizeof (gpioCallbackFuncions)/sizeof (GPIO_CallbackFxn)、
.intPriority =(~0)
};
/*
*========================================= I2C ================================================
*
#include
#include
I2CMSP432_Object i2cMSP432Objects[MSP432P4011_I2CCOUNT;
#ifndef _RGC_PKG
#define Periph_BASE ((uint32_t) 0x40000000)/*!<外设起始地址*/
#define EUSCI_B1_BASE (Periph_BASE +0x00002400)/*!<模块 EUSCI_B1寄存器的基地址*
#endif
CONST I2CMSP432_HWAttrsV1 i2cMSP432HWAttrs[MSP432P4011_I2CCOUNT ={
#ifndef _RGC_PKG_
{
baseAddr = EUSCI_B0_BASE、
.intNum = INT_EUSCIB0、
.intPriority =(~0)、
时钟源= EUSCI_B_I2C_CLOCKSOURCE_SMCLK、
.dataPin = I2CMSP432_P1_6_UCB0SDA、
clkPin = I2CMSP432_P1_7_UCB.S
}、
{
baseAddr = EUSCI_B1_base、
.intNum = INT_EUSCIB1、
.intPriority =(~0)、
时钟源= EUSCI_B_I2C_CLOCKSOURCE_SMCLK、
.dataPin = I2CMSP432_P6_4_UCB1SDA、
clkPin = I2CMSP432_P6_5_UCB.S
}
其他
{
baseAddr = EUSCI_B0_BASE、
.intNum = INT_EUSCIB0、
.intPriority =(~0)、
时钟源= EUSCI_B_I2C_CLOCKSOURCE_SMCLK、
.dataPin = I2CMSP432_P1_6_UCB0SDA、
clkPin = I2CMSP432_P1_7_UCB.S
}
#endif
};
CONST I2C_Config I2C_CONFIG[MSP432P4011_I2CCOUNT ={
#ifndef _RGC_PKG_
{
fxnTablePtr =&I2CMSP432_fxnTable、
.object =&i2cMSP432Objects[MSP432P4011_I2CB0]、
hwAttrs =&i2cMSP432HWAttrs[MSP432P4011_I2CB0]
}、
{
fxnTablePtr =&I2CMSP432_fxnTable、
.object =&i2cMSP432Objects[MSP432P4011_I2CB1]、
hwAttrs =&i2cMSP432HWAttrs[MSP432P4011_I2CB1]
}
其他
{
fxnTablePtr =&I2CMSP432_fxnTable、
.object =&i2cMSP432Objects[MSP432P4011_I2CB0]、
hwAttrs =&i2cMSP432HWAttrs[MSP432P4011_I2CB0]
}
#endif
};
const uint_least8_t I2C_count = MSP432P4011_I2CCOUNT;
/*
*========================================= NVS ================================================
*
#include
#include
#include "oad_parameters.h"
/*
*保留用于 NVS 驱动程序的闪存扇区
*方法是放置一个未初始化的字节数组
*位于所需的闪存地址。
*将未初始化的数组放置在基址
*
#pragma LOCATION (SNP_CODE、NVS_OAD_BASE);
#pragma NOINIT (SNP_CODE);
uint8_t SNP_CODE[OAD_REGARE_SIZE];
#pragma LOCATION (metaBuf、NVS_meta_base);
pragma NOINIT (metaBuf);
char metaBuf[OAD_meta_size];
NVSMSP432_Object nvsMSP432Objects[MSP432P4011_NVSCOUNT];
CONST NVSMSP432_HWAttrs nvsMSP432HWAttrs[MSP432P4011_NVSCOUNT]={
{
regionBase =(void *) metaBuf、
regionSize = OAD_meta_size、
}、
{
regionBase =(void *) SNP_CODE、
regionSize = OAD_REGION、
}、
};
CONST NVS_Config NVS_CONFIG[MSP432P4011_NVSCOUNT]={
{
fxnTablePtr =&NVSMSP432_fxnTable、
.object =_nvsMSP432Objects[MSP432P4011_NVSMSP4320]、
hwAttrs =&nvsMSP432HWAttrs[MSP432P4011_NVSMSP4320]、
}、
{
fxnTablePtr =&NVSMSP432_fxnTable、
.object =_nvsMSP432Objects[MSP432P4011_NVSMSP4321]、
hwAttrs =&nvsMSP432HWAttrs[MSP432P4011_NVSMSP4321]、
}、
};
const uint_least8_t NVS_count = MSP432P4011_NVSCOUNT;
/*
*========================================= 电源================================================
*
CONST PowerMSP432_ConfigV1 PowerMSP432_CONFIG ={
policyInitFxn =&PowerMSP432_initPolicy、
policyFxn =&PowerMSP432_sleepPolicy、
.initialPerfLevel = 2、
.enablePolicy = true、
.enablePerf = true、
.enableParking = true
};
/*
*========================================= SPI ========================================================
*
#include
#include
SPIMSP432DMA_Object spiMSP432DMAObjects[MSP432P4011_SPICOUNT];
/*
*注意:SD 驱动程序可使用以下 SPI 实例进行通信
*通过 SPI 使用 SD 卡。 下面的'DEFaultTxBufValue'域被设定为0xFF
以满足 SDSPI 驱动程序要求。
*
CONST SPIMSP432DMA_HWAttrsV1 spiMSP432DMAHWAttrs[MSP432P4011_SPICOUNT]={
{
baseAddr = EUSCI_B0_BASE、
.bitOrder = EUSCI_B_SPI_MSB_FIRST、
时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
defaultTxBufValue = 0xFF、
.dmaIntNum = INT_DMA_INT1、
.intPriority =(~0)、
.rxDMAChannelIndex = DMA_CH1_EUSCIB0RX0、
TxDMAChannelIndex = DMA_CH0_EUSCIB0TX0、
clkPin = SPIMSP432DMA_P1_5_UCB0CLK、
simoPin = SPIMSP432DMA_P1_6_UCB0SIMO、
.somiPin = SPIMSP432DMA_P1_7_UCB0SOMI、
STEPIN = SPIMSP432DMA_P1_4_UCB0STE、
.pinMode = EUSCI_SPI_3引脚、
.minDmaTransferSize = 10
}、
{
baseAddr = EUSCI_B2_base、
.bitOrder = EUSCI_B_SPI_MSB_FIRST、
时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
defaultTxBufValue = 0xFF、
.dmaIntNum = INT_DMA_INT2、
.intPriority =(~0)、
.rxDMAChannelIndex = DMA_CH5_EUSCIB2RX0、
TxDMAChannelIndex = DMA_CH4_EUSCIB2TX0、
clkPin = SPIMSP432DMA_P3_5_UCB2CLK、
simoPin = SPIMSP432DMA_P3_6_UCB2SIMO、
.somiPin = SPIMSP432DMA_P3_7_UCB2SOMI、
.stebin = SPIMSP432DMA_P3_4_UCB2STE、
.pinMode = EUSCI_SPI_3引脚、
.minDmaTransferSize = 10
}、
{
baseAddr = EUSCI_A1_base、
.bitOrder = EUSCI_A_SPI_MSB_FIRST、
时钟源= EUSCI_A_SPI_CLOCKSOURCE_SMCLK、
defaultTxBufValue = 0xFF、
.dmaIntNum = INT_DMA_INT2、
.intPriority =(~0)、
.rxDMAChannelIndex = DMA_CH3_EUSCIA1RX、
TxDMAChannelIndex = DMA_CH2_EUSCIA1TX、
clkPin = SPIMSP432DMA_P2_5_UCA1CLK、
simoPin = SPIMSP432DMA_P2_6_UCA1SIMO、
.somiPin = SPIMSP432DMA_P2_7_UCA1SOMI、
.stebin = SPIMSP432DMA_P2_3_UCA1STE、
.pinMode = EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW、
.minDmaTransferSize = 10
}、
{
baseAddr = EUSCI_B2_base、
.bitOrder = EUSCI_B_SPI_MSB_FIRST、
时钟源= EUSCI_B_SPI_CLOCKSOURCE_SMCLK、
defaultTxBufValue = 0xFF、
.dmaIntNum = INT_DMA_INT3、
.intPriority =(~0)、
.rxDMAChannelIndex = DMA_CH5_EUSCIB2RX0、
TxDMAChannelIndex = DMA_CH4_EUSCIB2TX0、
clkPin = SPIMSP432DMA_P3_5_UCB2CLK、
simoPin = SPIMSP432DMA_P3_6_UCB2SIMO、
.somiPin = SPIMSP432DMA_P3_7_UCB2SOMI、
.stebin = SPIMSP432DMA_P2_4_UCB2STE、
.pinMode = EUSCI_SPI_4PIN_UCxSTE_ACTIVE_LOW、
.minDmaTransferSize = 10
}
};
CONST SPI_Config SPI_CONFIG[MSP432P4011_SPICOUNT]={
{
.fxnTablePtr =&SPIMSP432DMA_fxnTable、
.object =&spiMSP432DMAObjects[MSP432P4011_SPIB0]、
hwAttrs =&spiMSP432DMAHWAttrs[MSP432P4011_SPIB0]
}、
{
.fxnTablePtr =&SPIMSP432DMA_fxnTable、
.object =&spiMSP432DMAObjects[MSP432P4011_SPIB2]、
hwAttrs =&spiMSP432DMAHWAttrs[MSP432P4011_SPIB2]
}、
{
.fxnTablePtr =&SPIMSP432DMA_fxnTable、
.object =&spiMSP432DMAObjects[MSP432P4011_SPIB3]、
hwAttrs =&spiMSP432DMAHWAttrs[MSP432P4011_SPIB3]
}、
{
.fxnTablePtr =&SPIMSP432DMA_fxnTable、
.object =&spiMSP432DMAObjects[MSP432P4011_SPIB4]、
hwAttrs =&spiMSP432DMAHWAttrs[MSP432P4011_SPIB4]
}
};
const uint_least8_t SPI_count = MSP432P4011_SPICOUNT;
/*
*========================================= UART ========================================================
*
#include
#include
UARTMSP432_Object uartMSP432Objects[MSP432P4011_UARTCOUNT];
unsigned char uartMSP432RingBuffer[MSP432P4011_UARTCOUNT][32];
/*
*波特率分频器是使用 MSP432波特率确定的
*计算器
* software-dl.ti.com/.../index.html
*
CONST UARTMSP432_BudrateConfig uartMSP432Budrates []={
/*{波特率、输入时钟、预分频器、UCBRFx、UCBRSx、 过采样}*/
{
.outputBudrate = 115200、
.inputClockFreq = 24000000、
.prescalar = 13、
hwRegUCBRFx = 0、
hwRegUCBRSx = 37、
过采样= 1.
}、
{115200、12000000、6、8、32、 1}、
{115200、6000000、3、4、2、 1}、
{115200、3000000、1、10、0、 1}、
{9600、24000000、156、4、0、 1}、
{9600、12000000、78、2、0、 1}、
{9600、6000000、39、1、0、 1}、
{9600、3000000、19、8、85、 1}、
{9600、32768、3、0、146、 0}
};
CONST UARTMSP432_HWAttrsV1 uartMSP432HWAttrs[MSP432P4011_UARTCOUNT]={
{
baseAddr = EUSCI_A0_BASE、
.intNum = INT_EUSCIA0、
.intPriority =(~0)、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEntry 尝试次数= sizeof (uartMSP432Budrates)/
sizeof (UARTMSP432_BudrateConfig)、
.budrateLUT = uartMSP432Budrates、
.ringBufPtr = uartMSP432RingBuffer[MSP432P4011_UARTA0]、
.ringBufSize = sizeof (uartMSP432RingBuffer[MSP432P4011_UARTA0])、
.rxPin = UARTMSP432_P1_2_UCA0RXD、
txPin = UARTMSP432_P1_3_UCA0TXD、
errorFxn =空
}、
#ifdef _RGC_PKG_
{
baseAddr = EUSCI_A1_base、
.intNum = INT_EUSCIA1、
.intPriority =(~0)、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEntry 尝试次数= sizeof (uartMSP432Budrates)/
sizeof (UARTMSP432_BudrateConfig)、
.budrateLUT = uartMSP432Budrates、
.ringBufPtr = uartMSP432RingBuffer[MSP432P4011_UARTA1]、
.ringBufSize = sizeof (uartMSP432RingBuffer[MSP432P4011_UARTA1])、
.rxPin = UARTMSP432_P2_2_UCA1RXD、
txPin = UARTMSP432_P2_3_UCA1TXD、
errorFxn =空
}、
#endif
{
baseAddr = EUSCI_A2_base、
.intNum = INT_EUSCIA2、
.intPriority =(~0)、
时钟源= EUSCI_A_UART_CLOCKSOURCE_SMCLK、
.bitOrder = EUSCI_A_UART_LSB_FIRST、
numBudrateEntry 尝试次数= sizeof (uartMSP432Budrates)/
sizeof (UARTMSP432_BudrateConfig)、
.budrateLUT = uartMSP432Budrates、
.ringBufPtr = uartMSP432RingBuffer[MSP432P4011_UARTA2]、
.ringBufSize = sizeof (uartMSP432RingBuffer[MSP432P4011_UARTA2])、
.rxPin = UARTMSP432_P3_2_UCA2RXD、
TxPin = UARTMSP432_P3_3_UCA2TXD、
errorFxn =空
}
};
CONST UART_Config UART_CONFIG[MSP432P4011_UARTCOUNT]={
{
.fxnTablePtr =&UARTMSP432_fxnTable、
.object = uartMSP432Objects[MSP432P4011_UARTA0]、
hwAttrs = uartMSP432HWAttrs[MSP432P4011_UARTA0]
}、
#ifdef _RGC_PKG_
{
.fxnTablePtr =&UARTMSP432_fxnTable、
.object = uartMSP432Objects[MSP432P4011_UARTA1]、
hwAttrs = uartMSP432HWAttrs[MSP432P4011_UARTA1]
}、
#endif
{
.fxnTablePtr =&UARTMSP432_fxnTable、
.object = uartMSP432Objects[MSP432P4011_UARTA2]、
hwAttrs = uartMSP432HWAttrs[MSP432P4011_UARTA2]
}
};
const uint_least8_t UART_count = MSP432P4011_UARTCOUNT;
/*
*========================================= 看门狗=========================================
*
#include
#include
WatchdogMSP432_Object WatchdogMSP432Objects[MSP432P4011_WATCHDOGCOUNT];
const WatchdogMSP432_HWAttrs
WatchdogMSP432HWAttrs[MSP432P4011_WATCHDOGCOUNT]={
{
baseAddr = WDT_A_base、
.intNum = INT_WDT_A、
.intPriority =(~0)、
时钟源= WDT_A_CLOCKSOURCE_SMCLK、
时钟分频器= WDT_A_CLOCKDIVIDER_8192K
}
};
CONST Watchdog_Config Watchdog_config[MSP432P4011_WATCHDOGCOUNT]={
{
fxnTablePtr =&WatchdogMSP432_fxnTable、
.object =&watchdogMSP432Objects[MSP432P4011_watchdog]、
hwAttrs =&watchdogMSP432HWAttrs[MSP432P4011_watchdog]
}
};
const uint_least8_t Watchdog_count = MSP432P4011_WATCHDOGCOUNT;
此致、Laurent