打印
[MCU]

【MSP432评测】迟来的开箱测试

[复制链接]
1517|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yinwuqing110 于 2020-4-18 16:47 编辑

       昨晚发帖没有保存到草稿箱,过了晚上十一点,平台不接受任何的发帖存储,哎,悲哀,我服了这个规定了!今天周六来补补昨晚的帖子吧。其实收到MSP‑EXP432P401R LaunchPad开发套件是在周一晚上,至于有关MSP432P401R的开发资料,早已经准备好了,由于公司正在进行新项目的开发,所以最近没来得及发帖评测MSP432P401R。其实TI的在各大网站论坛举办的活动层出不穷,收到的礼品都是有TI的**。但TI举办的开发板试用评测的活动还是比较少的,所以能够通过此次MSP432P401R开发板试用的申请,也属幸运了。
      收到快递包裹后,拆开包装袋,有一个标识好MSP‑EXP432P401R LaunchPad开发套件的盒子,盒子底部一如既往地采用TI的**。

         然后拆开盒子,里面有此次评测的开发核心板,使用防静电袋封装着。还有Micro USB数据线,用来连接PC端,可当串口下载线,提供了快速操作手册,小喇叭的发帖提醒语,来一张全家福如下:

      阅读快速操作手册,可以得知关于此开发板的大概资源,下载资源及软件开发包的链接网址。这里着重介绍如何去使用官方提供的“outofbox_msp432p401r”工程。

       接下来打开防静电袋,取出MSP432P401R核心板,来一张正面特写

        MSP432P401R是MSP432系列器件中首款具有ARM Cortex-M4F内核的低功耗高性能产品。板卡上面集成了按键、LED等外设。开发板是黑色的,官方提供的资料都是针对红色的,那么它们到底存在哪些差异呢?其实两者区别不大,只是存在几处不同,开发起来两者并无其他区别。

     MSP-EXP432P401R的模块框图如下:

     核心MCU采用100PIN的QFP封装,MSP432P401RIPZ的pin脚定义如下:

     然后来看看板卡的底面,底面没有采用一个电子元器件,有的只是两个双排10pin的2.54mm母座插针孔,图案很有个性。

      了解了板卡上的硬件资源,接下来搭建软件开发平台。MSP432P401R支持GCC、CCS、Keil以及IAR集成开发工具,由于本人使用的Keil比较多,习惯先搭建一下基于Keil的开发环境。首先根据快速操作手册指引,进入SDK下载网址,如下图所示:

       下载SDK后,双击安装即可。然后下载使用Keil的支持pack包,地址在pack包下载网址中查找,然后下载

      下载完“TexasInstruments.MSP432P4xx_DFP.3.2.6.zip”的pack包后,然后解压,进入到“TexasInstruments.MSP432P4xx_DFP.3.2.6\Examples\BlinkLED\ARM”目录下,双击打开“BlinkLED”工程,Keil会自动获取拷贝,完成pack包的安装,如下图所示:

     完成了pack包的安装,然后进入“D:\ti\simplelink_msp432p4_sdk_3_40_01_02\examples\nortos\MSP_EXP432P401R\demos\outofbox_msp432p401r\keil”(当然我的SDK是安装在D盘根目录下)目录下,打开快速操作手册所推荐的工程“outOfBox_msp432p401r”,然后进行全编译,没有错误,没有警告,说明工程已经导入成功。main.c的程序如下:
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
#include <time.h>
#include <stdlib.h>

#define MCLK_FREQUENCY 3000000
#define PWM_PERIOD (MCLK_FREQUENCY/5000)

unsigned int S1buttonDebounce = 0; // Deboounce state for button S1
unsigned int S2buttonDebounce = 0; // Deboounce state for button S1

int32_t interval = 0;       // Elapsed interval between taps
int32_t periods[4];         // LED blink periods for each color state
int oldTick = 0;            // SysTick value of previous tap
int newTick = 0;            // SysTick value of current tap

int counting = 0;           // Whether currently counting taps and interval between taps
int count = 0;              // Counts # of seconds elapsed since last tap
int sysTickCount = 0;       // Counts # of SysTick interrupts since last tap
int taps = 0;               // Counts # of taps from last reset

/* Current color of the blinking RGB LED
* 4 possible states: R, G, B, random color */
unsigned int currentColor = 0;

#define RED     255
#define GREEN   255
#define BLUE    255

int bytesReceived = 7;      // Keeps track of # UART bytes received
int32_t receiveFreq = 0;    // Receives LED blink frequency from GUI
char start[5];              // Receives 'START' keyword
int ack = 0;                // Track acknowledgement sent to GUI

/* TimerA UpMode Configuration Parameter */
const Timer_A_UpModeConfig upConfig =
{
        TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source
        TIMER_A_CLOCKSOURCE_DIVIDER_1,          // SMCLK/1 = 3MHz
        45000,                                  // 15ms debounce period
        TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt
        TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ,    // Enable CCR0 interrupt
        TIMER_A_DO_CLEAR                        // Clear value
};

const Timer_A_UpModeConfig TA2upConfig =
{
        TIMER_A_CLOCKSOURCE_SMCLK,              // SMCLK Clock Source
        TIMER_A_CLOCKSOURCE_DIVIDER_64,         // SMCLK/64 ~ 46.9 kMHz
        46875,                                  // 1s timer period
        TIMER_A_TAIE_INTERRUPT_DISABLE,         // Disable Timer interrupt
        TIMER_A_CCIE_CCR0_INTERRUPT_ENABLE ,    // Enable CCR0 interrupt
        TIMER_A_DO_CLEAR                        // Clear value
};

/* Port mapper configuration register */
const uint8_t port_mapping[] =
{
    //Port P2:
    PM_TA0CCR1A, PM_TA0CCR2A, PM_TA0CCR3A, PM_NONE, PM_TA1CCR1A, PM_NONE, PM_NONE, PM_NONE
};

/* UART Configuration Parameter. These are the configuration parameters to
* make the eUSCI A UART module to operate with a 115200 baud rate. These
* values were calculated using the online calculator that TI provides
* at:
*http://processors.wiki.ti.com/index.php/USCI_UART_Baud_Rate_Gen_Mode_Selection
*/
const eUSCI_UART_ConfigV1 uartConfig =
{
        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source
        26,                                      // BRDIV = 26
        0,                                       // UCxBRF = 0
        0,                                       // UCxBRS = 0
        EUSCI_A_UART_NO_PARITY,                  // No Parity
        EUSCI_A_UART_LSB_FIRST,                  // MSB First
        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit
        EUSCI_A_UART_MODE,                       // UART mode
        EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION,  // Low Frequency Mode
        EUSCI_A_UART_8_BIT_LEN                  // 8 bit data length
};

/*
* Main function
*/
int main(void)
{
    /* Halting WDT and disabling master interrupts */
    MAP_WDT_A_holdTimer();
    MAP_Interrupt_disableMaster();

    /* Seed the pseudo random num generator */
    srand(TLV->RANDOM_NUM_1);

    /* Set the core voltage level to VCORE1 */
    MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);

    /* Set 2 flash wait states for Flash bank 0 and 1*/
    MAP_FlashCtl_setWaitState(FLASH_BANK0, 2);
    MAP_FlashCtl_setWaitState(FLASH_BANK1, 2);

    /* Default SysTick period for all 4 color states = 0.5s */
    periods[0] = 1500000;
    periods[1] = 1500000;
    periods[2] = 1500000;
    periods[3] = 1500000;

    /* Initialize main clock to 3MHz */
    MAP_CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_3);
    MAP_CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );
    MAP_CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );
    MAP_CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1 );

    /* Selecting P1.2 and P1.3 in UART mode and P1.0 as output (LED) */
    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
        GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);

    /* GPIO Setup for Pins 2.0-2.2 */
    MAP_PMAP_configurePorts((const uint8_t *) port_mapping, PMAP_P2MAP, 1,
        PMAP_DISABLE_RECONFIGURATION);

    MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2,
        GPIO_PIN0 | GPIO_PIN1 | GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION);

    /* Confinguring P1.1 & P1.4 as an input and enabling interrupts */
    MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4);
    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4);
    MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4);
    MAP_GPIO_interruptEdgeSelect(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4, GPIO_HIGH_TO_LOW_TRANSITION);

    /* Configuring UART Module */
    MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);

    /* Enable UART module */
    MAP_UART_enableModule(EUSCI_A0_BASE);

    /* Configure TimerA0 without Driverlib (CMSIS style register access) */
    TIMER_A0->CCR[0] = PWM_PERIOD;
    TIMER_A0->CCTL[1] = TIMER_A_CCTLN_OUTMOD_7;                      // CCR1 reset/set
    TIMER_A0->CCR[1] = PWM_PERIOD * (RED/255);         // CCR1 PWM duty cycle
    TIMER_A0->CCTL[2] = TIMER_A_CCTLN_OUTMOD_7;                      // CCR2 reset/set
    TIMER_A0->CCR[2] = PWM_PERIOD * (0/255);           // CCR2 PWM duty cycle
    TIMER_A0->CCTL[3] = TIMER_A_CCTLN_OUTMOD_7;                      // CCR3 reset/set
    TIMER_A0->CCR[3] = PWM_PERIOD * (0/255);           // CCR3 PWM duty cycle
    TIMER_A0->CTL = TIMER_A_CTL_SSEL__SMCLK | TIMER_A_CTL_MC__UP | TIMER_A_CTL_CLR;  // SMCLK, up mode, clear TAR

    /* Configuring TimerA1 and TimerA2 for Up Mode  using Driverlib*/
    MAP_Timer_A_configureUpMode(TIMER_A1_BASE, &upConfig);
    MAP_Timer_A_configureUpMode(TIMER_A2_BASE, &TA2upConfig);

    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);

    /* Configure and enable SysTick */
    MAP_SysTick_setPeriod(1500000);
    MAP_SysTick_enableModule();
    MAP_SysTick_enableInterrupt();

    /* Main while loop */
    while(1)
    {
        MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1 | GPIO_PIN4);
        MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
        MAP_Interrupt_enableInterrupt(INT_EUSCIA0);
        MAP_Interrupt_enableInterrupt(INT_PORT1);
        MAP_Interrupt_enableInterrupt(INT_TA1_0);
        MAP_Interrupt_enableInterrupt(INT_TA2_0);
        MAP_Interrupt_enableMaster();
        MAP_PCM_gotoLPM0();
    }
}

/*
* Port 1 interrupt handler. This handler is called whenever switches attached
* to P1.1 (S1) and P1.4 (S2) are pressed.
*/
void PORT1_IRQHandler(void)
{
    newTick = MAP_SysTick_getValue();
    uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);

    /* Handles S1 button press */
    if (status & GPIO_PIN1)
    {
        if (S1buttonDebounce == 0)
        {
            S1buttonDebounce = 1;

            MAP_Interrupt_disableInterrupt(INT_PORT1);

            MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);

            MAP_Timer_A_stopTimer(TIMER_A2_BASE);
            MAP_Timer_A_configureUpMode(TIMER_A2_BASE, &TA2upConfig);
            MAP_Timer_A_startCounter(TIMER_A2_BASE, TIMER_A_UP_MODE);

            count = 0;
            taps++;

            if (counting == 0)
            {
                oldTick = newTick;
                counting = 1;
            }
            else
            {
                if (sysTickCount == 0)
                {
                    interval = oldTick - newTick;
                    periods[currentColor] = interval/2;
                    oldTick = newTick;
                }
                else
                {
                    interval = (MAP_SysTick_getPeriod() - newTick) + ((sysTickCount-1) * MAP_SysTick_getPeriod()) + oldTick;
                    oldTick = newTick;
                    sysTickCount = 0;
                }
                periods[currentColor] = ((periods[currentColor] * (taps-2)) + interval/2) / (taps-1);
                MAP_SysTick_setPeriod(periods[currentColor]);
            }

            /* Start button debounce timer */
            MAP_Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_UP_MODE);
        }
    }
    /* Handles S2 button press */
    if (status & GPIO_PIN4)
    {
        if (S2buttonDebounce == 0)
        {
            S2buttonDebounce = 1;

            MAP_Interrupt_disableInterrupt(INT_PORT1);

            /* Cycle through R, G, B, random color */
            if (currentColor < 3)
                currentColor++;
            else
                currentColor = 0;

            switch(currentColor)
            {
                case 0:  // Red
                    TIMER_A0->CCR[1] = PWM_PERIOD * (RED/255);              // CCR1 PWM duty cycle
                    TIMER_A0->CCR[2] = PWM_PERIOD * (0/255);                // CCR2 PWM duty cycle
                    TIMER_A0->CCR[3] = PWM_PERIOD * (0/255);                // CCR3 PWM duty cycle
                    break;
                case 1:  // Green
                    TIMER_A0->CCR[1] = PWM_PERIOD * (0/255);                // CCR1 PWM duty cycle
                    TIMER_A0->CCR[2] = PWM_PERIOD * (GREEN/255);            // CCR2 PWM duty cycle
                    TIMER_A0->CCR[3] = PWM_PERIOD * (0/255);                // CCR3 PWM duty cycle
                    break;
                case 2:  // Blue
                    TIMER_A0->CCR[1] = PWM_PERIOD * (0/255);                // CCR1 PWM duty cycle
                    TIMER_A0->CCR[2] = PWM_PERIOD * (0/255);                // CCR2 PWM duty cycle
                    TIMER_A0->CCR[3] = PWM_PERIOD * (BLUE/255);             // CCR3 PWM duty cycle
                    break;
                case 3:  // Random Color
                    TIMER_A0->CCR[1] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);      // CCR1 PWM duty cycle
                    TIMER_A0->CCR[2] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);      // CCR2 PWM duty cycle
                    TIMER_A0->CCR[3] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);      // CCR3 PWM duty cycle
                    break;
                default:
                    break;
            }

            /* Set current color's LED blink period */
            MAP_SysTick_setPeriod(periods[currentColor]);

            /* Start button debounce timer */
            MAP_Timer_A_startCounter(TIMER_A1_BASE, TIMER_A_UP_MODE);
        }
    }
}

/*
* Timer A1 interrupt handler. This handler determines whether to reset button
* debounce after debounce timer expires.
*/
void TA1_0_IRQHandler(void)
{
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    if (P1IN & GPIO_PIN1)
    {
        S1buttonDebounce = 0;
    }
    if (P1IN & GPIO_PIN4)
    {
        S2buttonDebounce = 0;
    }

    if ((P1IN & GPIO_PIN1) && (P1IN & GPIO_PIN4))
    {
        MAP_Timer_A_stopTimer(TIMER_A1_BASE);
    }
    MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_A1_BASE,
                TIMER_A_CAPTURECOMPARE_REGISTER_0);
}

/*
* Timer A2 interrupt handler. This handler resets tapping state variables if button S1 is
* not pressed for more than 4 seconds.
*/
void TA2_0_IRQHandler(void)
{
    if (counting == 1)
    {
        if (count < 4)
            count++;
        else
        {
            counting = 0;
            count = 0;
            sysTickCount = 0;
            taps = 0;
            MAP_Timer_A_stopTimer(TIMER_A2_BASE);
        }
    }
    MAP_Timer_A_clearCaptureCompareInterrupt(TIMER_A2_BASE,
                TIMER_A_CAPTURECOMPARE_REGISTER_0);
}

/*
* SysTick interrupt handler. This handler toggles RGB LED on/off.
*/
void SysTick_Handler(void)
{
    if (counting == 1)
        sysTickCount++;

    /* Toggle RGB LED OFF */
    if (TIMER_A0->CCTL[1] & TIMER_A_CCTLN_OUTMOD_7){
        TIMER_A0->CCTL[1] = TIMER_A_CCTLN_OUTMOD_0;
        TIMER_A0->CCTL[2] = TIMER_A_CCTLN_OUTMOD_0;
        TIMER_A0->CCTL[3] = TIMER_A_CCTLN_OUTMOD_0;
    }
    /* Toggle RGB LED ON */
    else if (!(TIMER_A0->CCTL[1] & TIMER_A_CCTLN_OUTMOD_0)){
        if (currentColor == 3)
        {
            TIMER_A0->CCR[1] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);                 // CCR1 PWM duty cycle
            TIMER_A0->CCR[2] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);                // CCR2 PWM duty cycle
            TIMER_A0->CCR[3] = (int)((rand() % 255) / 255.0f * PWM_PERIOD);                  // CCR3 PWM duty cycle
        }
        TIMER_A0->CCTL[1] = TIMER_A_CCTLN_OUTMOD_7;
        TIMER_A0->CCTL[2] = TIMER_A_CCTLN_OUTMOD_7;
        TIMER_A0->CCTL[3] = TIMER_A_CCTLN_OUTMOD_7;
    }
}

/*
* EUSCI A0 UART interrupt handler. Receives data from GUI and sets LED color/blink frequency
*/
void EUSCIA0_IRQHandler(void)
{
    int receiveByte = UCA0RXBUF;

    /* Send acknowledgement to the GUI */
    if (ack == 0) {
        MAP_UART_transmitData(EUSCI_A0_BASE, 'A');
        ack = 1;
    }

    /* Wait for 'START' keyword to be received before changing color */
    if (bytesReceived > 6) {
        start[0] = start[1];
        start[1] = start[2];
        start[2] = start[3];
        start[3] = start[4];
        start[4] = receiveByte;

        if (start[0] == 'S' && start[1] == 'T' && start[2] == 'A' && start[3] == 'R' && start[4] == 'T')
            bytesReceived = -1;
    }

    /* Receive/Set color and frequency of LED */
    else {
        if (bytesReceived == 0)
            TIMER_A0->CCR[1] = (int)(PWM_PERIOD * (receiveByte/255.0f));                  // CCR3 PWM duty cycle
        else if (bytesReceived == 1)
            TIMER_A0->CCR[2] = (int)(PWM_PERIOD * (receiveByte/255.0f));                  // CCR3 PWM duty cycle
        else if (bytesReceived == 2)
            TIMER_A0->CCR[3] = (int)(PWM_PERIOD * (receiveByte/255.0f));                  // CCR3 PWM duty cycle
        else if (bytesReceived == 3)
        {
            receiveFreq = 0;
            receiveFreq |= receiveByte;
        }
        else if (bytesReceived == 4)
            receiveFreq |= (receiveByte << 8);
        else if (bytesReceived == 5)
            receiveFreq |= (receiveByte << 16);
        else if (bytesReceived == 6)
        {
            receiveFreq |= (receiveByte << 24);
            MAP_SysTick_setPeriod(receiveFreq);
            ack = 0;
        }
    }

    if (bytesReceived < 7)
        bytesReceived++;
}


     由此可见,基本上都是采用按键中断的形式来触发改变LED点亮的状态。接下来需要将编译好的二进制文件烧写到开发板中,我这里采用的是JLink调试下载器,使用DAP方式也是可以下载,但速度有点慢,因此不推荐。将JLink调试下载器与开发板的下载接口相连接,打开Keil中的魔法棒,在Debug选项中勾选JLink方式,能够识别到JLink设备说明安装的JLink驱动也没问题了。

     然后在Keil的菜单栏中直接点击load图标,即可完成程序的烧写。

     然后将板卡重新上电,与原来出厂的程序一样,也是通过按键S1来切换灯光变化的频率,通过按键S2来切换灯光的颜色变化。具体的操作演示视频如下:
     https://v.youku.com/v_show/id_XNDYzNjg3NDg5Mg==.html

    https://v.youku.com/v_show/id_XNDYzNTQxNDEyOA==.html


    接下来体验一下使用TI主推的CCS集成开发工具,通过TI的官网很容易获得CCS的下载地址,工具完全免费,选择最新版的下载安装。下载的网址如下截图:

     解压“CCS10.0.0.00010_win64.zip”文件,双击“ccs_setup_10.0.0.00010.exe”,然后进入安装界面:

    一路默认,今日选择组件界面,我们使用的是MSP-EXP432P401R 版本1.0(黑色)LaunchPad 开发套件,因此勾选如下图所示即可

     根据需求,勾选是否需要安装调试JLink驱动,安装过程中建议将杀毒软件关闭,此次将CCS安装在C盘,安装进度信息如下:


      安装完成后重启计算机,打开安装好的CCS软件,初次使用建议先更新Code Composer Studio IDE,然后创建基本的SimpleLink MSP432项目,与其它的软件设置一样,选择器件型号,设置项目名称,获取模板工程示例选择从“TI资源浏览器导入SimpleLink”示例,然后进行调试器的设置,调试应用程序。具体操作可参照《zhcu166f.pdf》文档,附件奉上: zhcu166f.pdf (1.93 MB)
      以上就是基于MSP-EXP432P401R开发板的开发demo体验,总体感觉TI的资源整理的很规范,文档资料相当齐全。TI的SimpleLink MCU SDK兼容性比较好,SimpleLink MCU SDK包括支持CC13xx/CC26xx、CC32xx 和MSP432器件的整体框架,此三个MCU系列均可使用相同的顶层API。

使用特权

评论回复

相关帖子

沙发
yinwuqing110|  楼主 | 2020-4-18 22:34 | 只看该作者

【MSP432评测】迟来的开箱体验

       说也奇怪,今天下班回来发帖,昨晚的发帖文本又可以恢复了,由于白天在公司已经重新提交了帖子,附件没有提示恢复了。今天发帖忘记将接线示意图附上了,今晚补上,如下照片所示:

使用特权

评论回复
板凳
full_stack| | 2020-4-19 20:21 | 只看该作者
yinwuqing110 发表于 2020-4-18 22:34
说也奇怪,今天下班回来发帖,昨晚的发帖文本又可以恢复了,由于白天在公司已经重新提交了帖子,附 ...

你下面这个板子叫什么

使用特权

评论回复
地板
zhangmangui| | 2020-4-19 21:27 | 只看该作者
full_stack 发表于 2020-4-19 20:21
你下面这个板子叫什么

是不是FT232啥的做的仿真器

使用特权

评论回复
5
zhangmangui| | 2020-4-19 21:37 | 只看该作者
建议下载MSP432WARE

使用特权

评论回复
6
full_stack| | 2020-4-19 22:39 | 只看该作者
zhangmangui 发表于 2020-4-19 21:27
是不是FT232啥的做的仿真器

一转多 调试下载器

使用特权

评论回复
7
yinwuqing110|  楼主 | 2020-4-20 09:14 | 只看该作者
full_stack 发表于 2020-4-19 20:21
你下面这个板子叫什么

这个就是传说中的JLink烧录器呀,兄弟。

使用特权

评论回复
8
full_stack| | 2020-4-20 09:33 | 只看该作者
yinwuqing110 发表于 2020-4-20 09:14
这个就是传说中的JLink烧录器呀,兄弟。

自制的吗

使用特权

评论回复
9
yinwuqing110|  楼主 | 2020-4-20 09:58 | 只看该作者

淘宝上淘的呀

使用特权

评论回复
10
gaoyang9992006| | 2020-4-20 20:16 | 只看该作者
MSP432WARE里面例子多

使用特权

评论回复
11
zhangmangui| | 2020-4-21 21:38 | 只看该作者

羔羊没申请一块吗

使用特权

评论回复
12
gaoyang9992006| | 2020-4-21 22:54 | 只看该作者
zhangmangui 发表于 2020-4-21 21:38
羔羊没申请一块吗

几年前我就用过这个版本的了,TI库存卖不掉的,总是拿出来搞活动。

使用特权

评论回复
13
zhangmangui| | 2020-4-23 22:14 | 只看该作者
gaoyang9992006 发表于 2020-4-21 22:54
几年前我就用过这个版本的了,TI库存卖不掉的,总是拿出来搞活动。

好吧   这处理器主要突出射频是吧

使用特权

评论回复
14
gaoyang9992006| | 2020-4-24 09:01 | 只看该作者
zhangmangui 发表于 2020-4-23 22:14
好吧   这处理器主要突出射频是吧

432跟射频没有一毛钱关系啊

使用特权

评论回复
15
zhangmangui| | 2020-4-25 19:20 | 只看该作者
gaoyang9992006 发表于 2020-4-24 09:01
432跟射频没有一毛钱关系啊

被误导了

SimpleLink MSP432P401x 微控制器 (MCU) 是具有集成 16 位精密 ADC 的优化型无线主机 MCU,可借助 FPU 和 DSP 扩展提供超低功耗性能,其中包括 80µA/MHz 的工作功率和 660nA 的待机功耗。作为优化的无线主机 MCU,MSP432P401x 可让开发人员向 基于 SimpleLink 无线连接解决方案的应用中添加高精度模拟和存储器扩展。

MSP432P401x 器件是 SimpleLink 微控制器 (MCU) 平台的一部分,其中包括 Wi-Fi®、低功耗 低功耗 Bluetooth®、低于 1GHz 器件和主机 MCU。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

1029

帖子

7

粉丝