请问怎么用MSP430F5529做出这种效果,就是短按P1.1按键,P1.2所连的灯亮,长按P1.1按键,P1.3所连的灯亮,双击P1.1按键,P1.4所连的灯亮。
这怎么做? 我一直没做出来.......
谢谢大佬,爱你们哦!!!!!!!!
请问怎么用MSP430F5529做出这种效果,就是短按P1.1按键,P1.2所连的灯亮,长按P1.1按键,P1.3所连的灯亮,双击P1.1按键,P1.4所连的灯亮。
这怎么做? 我一直没做出来.......
谢谢大佬,爱你们哦!!!!!!!!
ccs resource explorer Failed to create the part's controls
我用的是fr5594烧录的时候一直出现弹窗内容如下
Error initializing emulator:
A firmware update is required for the MSP430 Debug Interface (MSP-FET430UIF / MSP-FET / eZ-FET). Click the "Update" button to update the firmware and launch your debug session (this may require several update steps).
我按内容说的点了update,一会后还是会出现这个弹窗
SPI通讯在使用过程中时钟极性无法设置,空闲时并非高或者低电平,而是由发送寄存器的最后一位决定的,举例如果是0x08,那么接下来没有进行发送的时间里都是低电平,直到下一次发送数据,如果是0x09相反,持续为高电平。
代码如下
SPI设置
// Setup eUSCI_A0
P2OUT &= ~BIT7; // Clear P1.0
P2DIR |= BIT7; // Set P1.0 to output direction
P2OUT &= ~0x40; //LED2on//ss置低
P1SEL |= BIT2 | BIT3 | BIT6; // Set P1.0,P1.2,P1.3,P1.6 to non-IO
UCA0CTLW0 |= UCSWRST; // **Put state machine in reset**
UCA0CTLW0 |= UCMST | UCSYNC | UCCKPL | UCMSB ; // 3-pin, 8-bit SPI master
// Clock polarity high, MSB
UCA0CTLW0 |= UCSSEL_2; // SMCLK
UCA0BRW_L = 0x01; // 16MHz
UCA0BRW_H = 0; //
UCA0MCTLW = 0; // No modulation
UCA0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
发送在定时器中断中运行
if (!(UCA1IFG & UCTXIFG)) ;
UCA1TXBUF =0x08;
各位大神,我现在用的是MSP430G2231的芯片,但是在配置定时器时选择时钟时为TACLK,ACLK,INCLK,定时器无法进入中断,我的代码如下:
void timer0_init(void)
{
TA0CTL |= TASSEL_1+TACLR+MC_3+ID_0;
TA0CCR0 = 1024;//
TA0CCTL0 |= CCIE;
_EINT();
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer0_A0(void) //TACCR0中断
{
P1OUT^=BIT6;
}
}
如上代码, TASSEL_1应该是选择ACLK时钟源,但是进不了中断!除此之外,TACLK,INCLK设置为时钟源时,都进不了中断?
不知道什么原因引起?由于以前没接触过TI这款芯片,所以不太熟悉!
用的官方给的例程,改了地址和数据,程序就会死在一句标志位检查语句
一直死在while里,这是在driverlib.c文件中
while (!BITBAND_PERI(EUSCI_B_CMSIS(moduleInstance)->rIFG.r, UCTXIFG_OFS));
我的程序,如下,死在了标红的语句里。
/* DriverLib Defines */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
/* Standard Defines */
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
/* Slave Address for I2C Slave */
#define SLAVE_ADDRESS 0xD0
#define NUM_OF_REC_BYTES 1
/* Variables */
const uint8_t TXData[] = {0x6B,0x00};
static uint8_t RXData;
/* I2C Master Configuration Parameter */
const eUSCI_I2C_MasterConfig i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
3000000, // SMCLK = 3MHz (default)
EUSCI_B_I2C_SET_DATA_RATE_100KBPS, // Desired I2C Clock of 100khz
0, // No byte counter threshold
EUSCI_B_I2C_NO_AUTO_STOP // No Autostop
};
int main(void)
{
/* Disabling the Watchdog */
MAP_WDT_A_holdTimer();
/* Select Port 1 for I2C - Set Pin 6, 7 to input Primary Module Function,
* (UCB0SIMO/UCB0SDA, UCB0SOMI/UCB0SCL).
*/
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
GPIO_PIN6 + GPIO_PIN7, GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
MAP_GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
/* Initializing I2C Master to SMCLK at 100khz with no autostop */
MAP_I2C_initMaster(EUSCI_B0_BASE, &i2cConfig);
/* Specify slave address */
MAP_I2C_setSlaveAddress(EUSCI_B0_BASE, SLAVE_ADDRESS);
/* Enable I2C Module to start operations */
MAP_I2C_enableModule(EUSCI_B0_BASE);
MAP_Interrupt_enableInterrupt(INT_EUSCIB0);
// enable RX interrupts
MAP_I2C_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_I2C_RECEIVE_INTERRUPT0);
while (1)
{
RXData=0;
/* Making sure the last transaction has been completely sent out */
while (MAP_I2C_masterIsStopSent(EUSCI_B0_BASE));
/* Send out EEPROM Mock Read Cmd (2 databytes) */
MAP_I2C_masterSendMultiByteStart(EUSCI_B0_BASE, TXData[1]); // Start + 1Byte
MAP_I2C_masterSendMultiByteNext(EUSCI_B0_BASE, TXData[0]); // Poll for TXINT,Send 1Byte
/*---------------------------------------------*/
/* Now we need to initiate the read */
/* Wait until 2nd Byte has been output to shift register */
while(!(EUSCI_B0->IFG & EUSCI_B_IFG_TXIFG0));
// Send the restart condition, read one byte, send the stop condition right away
EUSCI_B0->CTLW0 &= ~(EUSCI_B_CTLW0_TR);
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_TXSTT;
while(MAP_I2C_masterIsStartSent(EUSCI_B0_BASE));
EUSCI_B0->CTLW0 |= EUSCI_B_CTLW0_TXSTP;
//while(!(EUSCI_B0->IFG & EUSCI_B_IFG_RXIFG0));
//RXData = EUSCI_B0->RXBUF;
//---------------------------------
MAP_PCM_gotoLPM0InterruptSafe();
// Slave should send a single 'R' back
if(RXData != 'R'){
// Error- set P1.0 high
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);
while(1);
}
__delay_cycles(300000); // ~100ms pause between transmissions
}
}
/*******************************************************************************
* eUSCIB0 ISR. The repeated start and transmit/receive operations happen
* within this ISR.
*******************************************************************************/
void EUSCIB0_IRQHandler(void)
{
uint_fast16_t status;
status = MAP_I2C_getEnabledInterruptStatus(EUSCI_B0_BASE);
MAP_I2C_clearInterruptFlag(EUSCI_B0_BASE, status);
/* Receives bytes into the receive buffer. If we have received all bytes,
* send a STOP condition */
if (status & EUSCI_B_I2C_RECEIVE_INTERRUPT0)
{
// One-byte Read
RXData = MAP_I2C_masterReceiveSingle(EUSCI_B0_BASE);
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
}
}
芯片:MSP430FR6972
IDE:IAR6.30.1
问题描述:
我想使用宏定义的方式使用printf,但是按照下面这种方式一直报警告(
Warning[Pe1665]: concatenation with "down" in macro "DEBUG" does not create a valid token F:\WorkSpace\PW_KSH_C1_V1.0\Src\data_deal.c 550
)
所以想请教一下如何定义才算正确?
#if USE_DEBUG==1
#define DEBUG(format, ...) printf(format,##__VA_ARGS__)
#else
#define DEBUG(format, ...)
#endif
如何提高MSP430 内置温度传感器的测试精度?
430说明书上给的是1/8duty 1/3bias
芯片:MSP430FR6972
问题描述:
我使用的是ADC+TIM的采样方式,采样间隔约1ms,每次开启采样时,最开始的数据一直不准(大约有80多个不准点,之后就好了),所以请教一下这是什么原因呢?
/* 采样定时器配置 */
void TimerA1_Init(void)
{
TA1CCTL0 = CCIE;
TA1CCR0 = 32; /* 0.9-1ms */
TA1CTL = TASSEL__ACLK | MC__UP; /* ACLK, UP mode */
}
/* ADC配置 */
void MSP_ADC_Config(void)
{
/* 打开相应电源 */
PowerSwitch(VDD_ADC,ENABLE);
PowerSwitch(ADC_BAT,ENABLE);
/* 开启内部参考,Vref=2.5V */
while(REFCTL0 & REFGENBUSY);
REFCTL0 |= REFVSEL_2 | REFON;
/* 开启ADC并设置采样时间 */
ADC12CTL0 = ADC12ON | ADC12SHT0_2 | ADC12MSC;
/* ADC12SC触发采样,序列通道采样, SMCLK/4 */
ADC12CTL1 = ADC12SHP |ADC12SHS_0 | ADC12CONSEQ_1 | ADC12SSEL_3 | ADC12PDIV_1;
/* ADC通道配置: ADC_I->CH0, ADC_BAT->CH13 */
ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_0;
ADC12MCTL1 = ADC12VRSEL_1 | ADC12INCH_13 | ADC12EOS;
ADC12IER0 = ADC12IE1;
/* Wait for reference generator to settle */
while(!(REFCTL0 & REFGENRDY));
ADC12CTL0 |= ADC12ENC;
TimerA1_Init();
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A0_ISR(void)
{
ADC12CTL0 |= ADC12SC;
}
#pragma vector=ADC12_VECTOR
__interrupt void MSP_ADC_ISR(void)
{
if(ADC12IV & ADC12IV_ADC12IFG1)
{
Device_Status.Cur_Sampval[Device_Status.Sample_Num++]=ADC12MEM0;
Device_Status.Status_Info.Bat_Vol_B=ADC12MEM1;
/*
这里预留电池低电压处理程序
*/
if(Device_Status.Sample_Num == 20)
{
Device_Status.Full_Buff_Node=0;
Indicator_Task.Handle_Count += 1;
Indicator_Task.Cur_Handle_Flag=1;
#if USE_LP
LPM3_EXIT;
#endif
}
else if(Device_Status.Sample_Num >= 40)
{
Device_Status.Sample_Num=0;
Device_Status.Full_Buff_Node=1;
Indicator_Task.Handle_Count += 1;
Indicator_Task.Cur_Handle_Flag=1;
#if USE_LP
LPM3_EXIT;
#endif
}
}
ADC12IV=0;
}
MSP430F5328我使用 JTAG(MSP-FET430UIF)进行程序调试一开始是正常的,但是用了一段时间之后JTAG就连接不上了,有没有可能执行了不当操作把jtag锁定了 啊?我重新换了一个芯片就正常了,但是一段时间之后又出现了同样的问题。麻烦大家帮忙看下,谢谢!
大家好:
我们购买了BT-MSPAUDSOURCE Tools Bluetooth and MSP430 Audio开发板(MSP430F5229), 现在希望购买下载器和调试器;能帮推荐吗?
正常设备是4ua左右 有的莫名会变好 有的会自己升上去 是受什么因素影响?已刷三防胶
在MSP430FR2311的BSL开发中,我使用了软件调用BSL的方式。用DSP通过I2C给430传送了某指令,430接收了此指令后便执行跳转BSL的命令。
进入BSL后DSP边给430发送擦除指令。该指令会擦除430中接收DSP指令并执行跳转BSL的部分。
请问,怎样可以使430擦除代码的时候不擦出 跳转到BSL的那部分代码?
MSP430F6638单片机ADC通道能否同时进行两个通道的转化?当A0通道在转换的同时能否进行A1通道的转化?
linux 下 CCS怎么添加官方的库函数