yg776

  • 2019-05-21
  • 回复了主题帖: MSP430FR2111无法发送出数据的问题

    以上问题已解决,我记得好像是波特率虽然是按照手册上配的,但是还是不准确.....重新改了一下就能用了 void USART_Init(void) {     P1SEL0 |= BIT6 | BIT7;     UCA0CTLW0 = UCSWRST;     UCA0CTLW0 |= UCSSEL__ACLK  ;     UCA0BR0 = 3;     UCA0BR1 = 0x00;     UCA0MCTLW = 0x9200;     UCA0CTLW0 &=~ UCSWRST;     UCA0IE |= UCRXIE; }

  • 发表了主题帖: 分享LCD JLX12864G-086基于msp430的驱动

    C文件:#include <JLX12864g-086.h> #include "delay.h" void JLX12864G_086_GPIOInit(void) {     LCD_SCLK_Init;     LCD_SID_Init;     LCD_RS_Init;     LCD_RESET_Init;     LCD_CS1_Init;     ROM_IN_Init;     ROM_OUT_Init;     ROM_SCK_Init;     ROM_CS_Init; } void transfer_command_lcd(u8 data1) {     char i;     LCD_CS1_LOW;     LCD_RS_LOW;     for(i=0;i<8;i++)     {         LCD_SCLK_LOW;         if(data1&0x80)             LCD_SID_HIGH;         else             LCD_SID_LOW;         LCD_SCLK_HIGH;         data1=data1<<1;     }     LCD_CS1_HIGH; } void initial_lcd(void) {     LCD_RESET_LOW;     Delay_us(100);     LCD_RESET_HIGH;     Delay_us(100);     transfer_command_lcd(0xe2);  //软复位     Delay_us(5);     transfer_command_lcd(0x2c);  //升压步聚1     Delay_us(50);     transfer_command_lcd(0x2e);  //升压步聚2     Delay_us(50);     transfer_command_lcd(0x2f);  //升压步聚3     Delay_us(5);     transfer_command_lcd(0x23);  //粗调对比度,可设置范围0x20~0x27     transfer_command_lcd(0x81);  //微调对比度     transfer_command_lcd(0x28);  //微调对比度的值,可设置范围0x00~0x3f     transfer_command_lcd(0xa2);  //1/9偏压比(bias)     transfer_command_lcd(0xc8);  //行扫描顺序:从上到下     transfer_command_lcd(0xa0);  //列扫描顺序:从左到右     transfer_command_lcd(0x40);  //起始行:第一行开始     transfer_command_lcd(0xaf);  //开显示 } void clear_screen(void) {     unsigned char i,j;     for(i=0;i<8;i++)     {         transfer_command_lcd(0xb0+i);         transfer_command_lcd(0x10);         transfer_command_lcd(0x00);         for(j=0;j<128;j++)         {             transfer_data_lcd(0x00);         }     } } void transfer_data_lcd(u8 data1) {     char i;     LCD_CS1_LOW;     LCD_RS_HIGH;     for(i=0;i<8;i++)     {         LCD_SCLK_LOW;         if(data1&0x80) LCD_SID_HIGH;         else LCD_SID_LOW;         LCD_SCLK_HIGH;         data1=data1<<=1;     }     LCD_CS1_HIGH; } void lcd_address(u16 page,u16 column) {     column=column-0x01;     transfer_command_lcd(0xb0+page-1);     transfer_command_lcd(0x10+(column>>4&0x0f));     transfer_command_lcd(column&0x0f); } void display_128x64(u8 *dp) {     uint i,j;     for(j=0;j<8;j++)     {         lcd_address(j+1,1);         for (i=0;i<128;i++)         {             transfer_data_lcd(*dp);             dp++;         }     } } void display_graphic_16x16(uchar page,uchar column,uchar *dp) {     uint i,j;     for(j=0;j<2;j++)     {         lcd_address(page+j,column);         for (i=0;i<16;i++)         {             transfer_data_lcd(*dp);             dp++;         }     } } void display_graphic_8x16(uchar page,uchar column,uchar *dp) {     uint i,j;     for(j=0;j<2;j++)     {         lcd_address(page+j,column);         for (i=0;i<8;i++)         {             transfer_data_lcd(*dp);             dp++;         }     } } void display_graphic_5x8(uchar page,uchar column,uchar *dp) {     uint i;     lcd_address(page,column);     for (i=0;i<5;i++)     {         transfer_data_lcd(*dp);         dp++;     } } void send_command_to_ROM(uchar datu ) //送指令到字库 {     uchar i;     for(i=0;i<8;i++ )     {         ROM_SCK_LOW;         Delay_us(10);         if(datu & 0x80)             ROM_IN_HIGH;         else             ROM_IN_LOW;         datu = datu<<1;         ROM_SCK_HIGH;         Delay_us(10);     } } static uchar get_data_from_ROM( ) //从字库取汉字或字符 {     uchar i;     uchar ret_data=0;     for(i=0;i<8;i++)     {         ROM_OUT_HIGH;         ROM_SCK_LOW;         //delay_us(1);         ret_data=ret_data<<1;         if((ROM_OUT_IN) == ROM_OUT_BIT)             ret_data = ret_data+1;         else             ret_data = ret_data;         ROM_SCK_HIGH;         //delay_us(1);     }     return(ret_data); } void get_and_write_16x16(u32 fontaddr,uchar page,uchar column) {     uchar i,j,disp_data;     ROM_CS_LOW;     send_command_to_ROM(0x03);     send_command_to_ROM((fontaddr&0xff0000)>>16);     send_command_to_ROM((fontaddr&0xff00)>>8);     send_command_to_ROM(fontaddr&0xff);     for(j=0;j<2;j++)     {         lcd_address(page+j,column);         for(i=0; i<16; i++ )         {             disp_data=get_data_from_ROM();             transfer_data_lcd(disp_data);         }     }     ROM_CS_HIGH; } void get_and_write_8x16(u32 fontaddr,uchar page,uchar column) {     uchar i,j,disp_data;     ROM_CS_LOW;     send_command_to_ROM(0x03);     send_command_to_ROM((fontaddr&0xff0000)>>16);     send_command_to_ROM((fontaddr&0xff00)>>8);     send_command_to_ROM(fontaddr&0xff);     for(j=0;j<2;j++)     {         lcd_address(page+j,column);         for(i=0; i<8; i++ )         {             disp_data=get_data_from_ROM();             transfer_data_lcd(disp_data);         }     }     ROM_CS_HIGH; } void get_and_write_5x8(u32 fontaddr,uchar page,uchar column) {     uchar i,disp_data;     ROM_CS_LOW;     send_command_to_ROM(0x03);     send_command_to_ROM((fontaddr&0xff0000)>>16);     send_command_to_ROM((fontaddr&0xff00)>>8);     send_command_to_ROM(fontaddr&0xff);     lcd_address(page,column);     for(i=0; i<5; i++ )     {         disp_data=get_data_from_ROM();         transfer_data_lcd(disp_data);     }     ROM_CS_HIGH; } u32 fontaddr=0; void display_GB2312_string(uchar page,uchar column,uchar *text) {     uchar i= 0;     while((text[i]>0x00))     {         if(((text[i]>=0xb0) &&(text[i]<=0xf7))&&(text[i+1]>=0xa1))         {             fontaddr = (text[i]- 0xb0)*94;             fontaddr += (text[i+1]-0xa1)+846;             fontaddr = (u32)(fontaddr*32);             get_and_write_16x16(fontaddr,page,column);             i+=2;             column+=16;         }         else if(((text[i]>=0xa1) &&(text[i]<=0xa3))&&(text[i+1]>=0xa1))         {             fontaddr = (text[i]- 0xa1)*94;             fontaddr += (text[i+1]-0xa1);             fontaddr = (u32)(fontaddr*32);             get_and_write_16x16(fontaddr,page,column);             i+=2;             column+=16;         }         else if((text[i]>=0x20) &&(text[i]<=0x7e))         {             fontaddr = (text[i]- 0x20);             fontaddr = (unsigned long)(fontaddr*16);             fontaddr = (unsigned long)(fontaddr+0x3cf80);             get_and_write_8x16(fontaddr,page,column);             i+=1;             column+=8;         }         else         i++;     } } void display_string_5x8(uchar page,uchar column,uchar *text) {     unsigned char i= 0;     while((text[i]>0x00))     {         if((text[i]>=0x20) &&(text[i]<=0x7e))         {             fontaddr = (text[i]- 0x20);             fontaddr = (unsigned long)(fontaddr*8);             fontaddr = (unsigned long)(fontaddr+0x3bfc0);             get_and_write_5x8(fontaddr,page,column);             i+=1;             column+=6;         }         else         i++;     } } H文件: #ifndef JLX12864G_086_H_ #define JLX12864G_086_H_ #include "msp430f5529.h" #if 1 #define LCD_CS1_PORT  P3DIR #define LCD_CS1_OUT   P3OUT #define LCD_CS1_BIT   BIT3 #define LCD_RESET_PORT P4DIR #define LCD_RESET_OUT  P4OUT #define LCD_RESET_BIT  BIT6 #define LCD_RS_PORT   P4DIR #define LCD_RS_OUT    P4OUT #define LCD_RS_BIT    BIT7 #define LCD_SID_PORT  P5DIR #define LCD_SID_OUT   P5OUT #define LCD_SID_BIT   BIT6 #define LCD_SCLK_PORT P5DIR #define LCD_SCLK_OUT  P5OUT #define LCD_SCLK_BIT  BIT7 #define ROM_CS_PORT   P7DIR #define ROM_CS_OUT    P7OUT #define ROM_CS_BIT    BIT4 #define ROM_SCK_PORT  P7DIR #define ROM_SCK_OUT   P7OUT #define ROM_SCK_BIT   BIT5 #define ROM_OUT_PORT  P7DIR #define ROM_OUT_OUT   P7OUT #define ROM_OUT_BIT   BIT6 #define ROM_OUT_IN    P7IN&BIT6 #define ROM_IN_PORT   P7DIR #define ROM_IN_OUT    P7OUT #define ROM_IN_BIT    BIT7 #else #define LCD_SCLK_PORT P2DIR #define LCD_SCLK_OUT  P2OUT #define LCD_SCLK_BIT  BIT5 #define LCD_SID_PORT  P2DIR #define LCD_SID_OUT   P2OUT #define LCD_SID_BIT   BIT4 #define LCD_RS_PORT   P1DIR #define LCD_RS_OUT    P1OUT #define LCD_RS_BIT    BIT5 #define LCD_RESET_PORT P1DIR #define LCD_RESET_OUT  P1OUT #define LCD_RESET_BIT  BIT4 #define LCD_CS1_PORT  P1DIR #define LCD_CS1_OUT   P1OUT #define LCD_CS1_BIT   BIT3 #define ROM_IN_PORT   P1DIR #define ROM_IN_OUT    P1OUT #define ROM_IN_BIT    BIT2 #define ROM_OUT_PORT  P4DIR #define ROM_OUT_OUT   P4OUT #define ROM_OUT_BIT   BIT3 #define ROM_OUT_IN    P4IN & BIT3 #define ROM_SCK_PORT  P4DIR #define ROM_SCK_OUT   P4OUT #define ROM_SCK_BIT   BIT0 #define ROM_CS_PORT   P3DIR #define ROM_CS_OUT    P3OUT #define ROM_CS_BIT    BIT7 #endif #define LCD_SCLK_Init LCD_SCLK_PORT |= LCD_SCLK_BIT #define LCD_SCLK_HIGH LCD_SCLK_OUT |= LCD_SCLK_BIT #define LCD_SCLK_LOW  LCD_SCLK_OUT &=~ LCD_SCLK_BIT #define LCD_SID_Init  LCD_SID_PORT |= LCD_SID_BIT #define LCD_SID_HIGH  LCD_SID_OUT |= LCD_SID_BIT #define LCD_SID_LOW   LCD_SID_OUT &=~ LCD_SID_BIT #define LCD_RS_Init   LCD_RS_PORT |= LCD_RS_BIT #define LCD_RS_HIGH   LCD_RS_OUT  |= LCD_RS_BIT #define LCD_RS_LOW    LCD_RS_OUT  &=~ LCD_RS_BIT #define LCD_RESET_Init LCD_RESET_PORT |= LCD_RESET_BIT #define LCD_RESET_HIGH LCD_RESET_OUT  |= LCD_RESET_BIT #define LCD_RESET_LOW  LCD_RESET_OUT  &=~ LCD_RESET_BIT #define LCD_CS1_Init   LCD_CS1_PORT  |= LCD_CS1_BIT #define LCD_CS1_HIGH   LCD_CS1_OUT   |= LCD_CS1_BIT #define LCD_CS1_LOW    LCD_CS1_OUT   &=~ LCD_CS1_BIT #define ROM_IN_Init    ROM_IN_PORT |= ROM_IN_BIT #define ROM_IN_HIGH    ROM_IN_OUT |= ROM_IN_BIT #define ROM_IN_LOW     ROM_IN_OUT &=~ ROM_IN_BIT #define ROM_OUT_Init    ROM_OUT_PORT &=~ ROM_OUT_BIT #define ROM_OUT_HIGH    ROM_OUT_OUT |= ROM_OUT_BIT #define ROM_OUT_LOW     ROM_OUT_OUT &=~ ROM_OUT_BIT #define ROM_SCK_Init   ROM_SCK_PORT |= ROM_SCK_BIT #define ROM_SCK_HIGH   ROM_SCK_OUT |= ROM_SCK_BIT #define ROM_SCK_LOW    ROM_SCK_OUT &=~ ROM_SCK_BIT #define ROM_CS_Init    ROM_CS_PORT |= ROM_CS_BIT #define ROM_CS_HIGH    ROM_CS_OUT |= ROM_CS_BIT #define ROM_CS_LOW     ROM_CS_OUT &=~ ROM_CS_BIT void JLX12864G_086_GPIOInit(void); void transfer_command_lcd(u8 data1); void initial_lcd(void); void clear_screen(void); void transfer_data_lcd(u8 data1); void lcd_address(u16 page,u16 column); void display_128x64(u8 *dp); void display_graphic_16x16(uchar page,uchar column,uchar *dp); void display_graphic_8x16(uchar page,uchar column,uchar *dp); void display_graphic_5x8(uchar page,uchar column,uchar *dp); void send_command_to_ROM(uchar datu); //送指令到字库 static uchar get_data_from_ROM(); void get_and_write_16x16(u32 fontaddr,uchar page,uchar column); void get_and_write_8x16(u32 fontaddr,uchar page,uchar column); void get_and_write_5x8(u32 fontaddr,u8 page,u8 column); void display_GB2312_string(uchar page,uchar column,uchar *text); void display_string_5x8(uchar page,uchar column,uchar *text); #endif /* 12864G_086_H_ */

  • 2019-05-02
  • 发表了主题帖: 关于TM4C123G在CCS环境下创建新工程的分享

      本人在不久之前接触了TM4C123GXL这块LAUNCHPAD,当初拿到这个板子就开始在CCS上创工程,结果用了网上的很多办法创建出来的工程都出错了。最后,找到了一个能用的方法,分享一下。按照他的方法就能正常创建工程还编译不报错。 链接:https://wenku.baidu.com/view/c9ba8b564b35eefdc8d333db.html

  • 2019-03-17
  • 回复了主题帖: 求教一下MSP430的RAM分配问题。

    谢谢你的回答!

  • 2019-03-16
  • 回复了主题帖: 求教一下MSP430的RAM分配问题。

    本帖最后由 yg776 于 2019-3-16 16:02 编辑 谢谢你回答我的问题。我上面的问题的确问得很不好,没把问题写清楚。且变量的类型都没给出来。 1.这个算式是16位ADC的处理程序。所以get是unsigned int型,但是因为尽量不用小数,所以我改成了unsigned long,但是仔细想想430是16位的,我还是有点担心直接用32位的unsigned long。 2.要把小数再乘以10000是因为我发现我使用的ccs在我使用sprintf(val,"%d",get);的时候,对于get的类型。编译器只让我使用%d,我如果换成%u或者%f它都会报错。如果不报错我就直接输出不会再去乘以10000了。 对于会超出FRAM的问题,我得出的结论是我芯片选型的错误。这程序是老师给的一个课题里面的。我随便选了一个430单片机。结果这款单片机只要一些浮点数的计算都会爆内存。但是我除了这个ADC的处理程序,后序还有开2次方根。所以这款单片机满足不了我的需求。我已经把单片机换成了F5529。 再次感谢你能回答我的问题:congratulate: 如果可以的话,大神能不能分享一些关于430单片机在CCS编译器下的内存分配的经验。以前一直写程序,但是我发现解决内存分配也是非常重要的。

  • 发表了主题帖: 求教一下MSP430的RAM分配问题。

      单片机:msp430fr2111    编译器:CCS v8.3.0      因为我最近在写一个关于msp430fr2111单片机的程序,写着写着,系统就提示我爆了FRAM内存。最后检查出来是因为一串有小数的计算公式捣的鬼:get = get/65535.0*4.096*10000;  可能因为是小数占的位数太多了,就提示了爆内存。之后我想了其他方式解决。可是系统一直会在我这一行算法提示一行信息:recommend moving them to RAM during run time or not using as there are processing/power intensive.   因为以前都是单纯地写程序,没考虑过内存的分配问题。求大佬指点一下。

  • 2019-03-07
  • 回复了主题帖: 使用MSP430FR2000的一些心得与例程

        P1SEL0 |= BIT6 | BIT7;     UCA0CTLW0 = UCSWRST;     UCA0CTLW0 |= UCSSEL__ACLK  ;     UCA0BR0 = 3;     UCA0BR1 = 0x00;     UCA0MCTLW = 0x9200;     UCA0CTLW0 &=~ UCSWRST;     UCA0IE |= UCRXIE; 以上的程序是FR2111在32768HZ情况下发送9600波特率的串口设置。已经验证能正常使用。

  • 2019-03-05
  • 发表了主题帖: MSP430FR2111无法发送出数据的问题

    串口的初始化: void USART_Init(void) {    P1SEL0 |= BIT2 + BIT3;    P1SEL1 &= ~(BIT2 + BIT3);    UCA0CTLW0 = UCSWRST;    UCA0CTLW0 |= UCSSEL__ACLK + UCPEN  +UCPAR ;    UCA0BR0 = 3;    UCA0BR1 = 0x00;    UCA0MCTLW = UCBRS3 + UCBRF0;    UCA0CTLW0 &=~ UCSWRST;    UCA0IE |= UCRXIE; } 发送: void Uart1send(u8 cm) { while(!(UCA0IFG & UCTXIFG)); UCA0TXBUF = cm; } void Uart1sendcom(u8 *cmd) {     register u8 *string = cmd;     while(*string != '\0')     {     Uart1send(*string++);     } } 主程序: void main(void) {     WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer     PM5CTL0 &= ~LOCKLPM5;                   // Disable the GPIO power-on default high-impedance mode                                             // to activate previously configured port settings     CLK_init();     //PWM_Init();     USART_Init();     while(1)     {         Uart1send('1');         Uart1send('7');     } } 求助下各位大神,这程序是我照着F5529单片机写的,后面我又对比了网上的FR系列的串口程序,并没有很大的差别啊,可是串口的P1.3引脚的TXD我用示波器看就是没有波形,之前说可能是我端口的输出配置有问题,但是我查了芯片手册 DIR不需要配置,只需要把SELX配置成01就可以了,我觉得理论上我已经检查不出有什么问题了,求大佬能帮忙看看。

  • 2019-03-02
  • 回复了主题帖: 关于msp430fr2000的内存FRAM的问题!!

    这个msp430fr2000的内存实在是太小了,我现在已经删掉了这2个数组。只保留了一个必须用的TIME【3】的全局变量。它的FRAM还是超过了它预先在CMD里面的0x180长度,我现在优化到极致只能保持0x2d7的长度,但是还是超过了。 而且还有个问题是,只要主函数使用了ds1302里面的函数,编译就会不通过。而且使用不同的函数还会带来不同的FRAM长度的不同,就是他的意思就是我不能全局变量 且 我不能使用过多的函数,我觉得不管这个芯片有多老,它也不应该连一个全局变量都不能放啊...... 反正主函数里面不可以放ds1302的函数,因为ds1302里面的函数提到了TIME【3】,使用的函数次数越多,fram就越大。 以下是我的三个主函数需要用到的函数。:time: void Ds1302_Init(void) {     uchar n;     Ds1302Write(0x8E,0X00);      //禁止写保护,就是关闭写保护功能     if(Ds1302Read(0xc1) != 0xaa)     {     for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年     {         Ds1302Write(0x80 + n*2,TIME[n]);     }     Ds1302Write(0xc0,0xaa);      //打开写保护功能 //  Ds1302Write(0x8E,0x80);      //打开写保护功能 } } void important_Init(void)                //这是用于修改了时间后 对寄存器进行的重新赋值 {     uchar n;     Ds1302Write(0x8E,0X00);      //禁止写保护,就是关闭写保护功能     for (n=0; n<3; n++)//写入7个字节的时钟信号:分秒时日月周年     {         Ds1302Write(0x80 +n*2,TIME[n]);     }     Ds1302Write(0x8E,0x80);      //打开写保护功能 } void Ds1302ReadTime(void) {     uchar n;     for (n=0; n<3; n++)//读取7个字节的时钟信号:分秒时日月周年     {         TIME[n] = Ds1302Read(0x81 + n*2);     } }

  • 回复了主题帖: 关于msp430fr2000的内存FRAM的问题!!

    懒猫爱飞 发表于 2019-3-2 08:44 1) 如楼上所说,如果RAM太小,程序空间还有空间,可以定义成常量数组或宏定义(宏定义也是常量的一种形式) ...
    我现在都已经这样了 void Ds1302ReadTime(void) {     uchar n; //    for (n=0; n<3; n++) //    { //        TIME[n] = Ds1302Read(READ_RTC_ADDR[n]); //    }     TIME[0] = Ds1302Read(0x81);     TIME[1] = Ds1302Read(0x83);     TIME[2] = Ds1302Read(0x85); } 数组也不要了,直接写地址,它还是不通过。。。。

  • 回复了主题帖: 关于msp430fr2000的内存FRAM的问题!!

    tiankai001 发表于 2019-3-2 07:22 这两个数组是常量吗,如果是,定义成常量,就不占RAM空间了
    改成了 const uchar  READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; const uchar  WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; 结果还是不通过

  • 回复了主题帖: 关于msp430fr2000的内存FRAM的问题!!

    懒猫爱飞 发表于 2019-3-2 08:44 1) 如楼上所说,如果RAM太小,程序空间还有空间,可以定义成常量数组或宏定义(宏定义也是常量的一种形式) ...
    我之前直接把全局变量的这2个数组拿到函数里面去过,还是不通过。 方法二。定义为常量数组, 我改成了 const uchar  READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; const uchar  WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; 因为这是2个地址数组,只读就行。我就想让他不占那么多空间。结果还是编译报错。 方法三,宏定义法。 我像这样宏定义了一下 //#define READ_RTC_ADDR[0] 0x81 //#define READ_RTC_ADDR[1] 0x83 //#define READ_RTC_ADDR[2] 0x85 //#define READ_RTC_ADDR[3] 0x87 //#define READ_RTC_ADDR[4] 0x89 //#define READ_RTC_ADDR[5] 0x8b //#define READ_RTC_ADDR[6] 0x8d 但是不能直接用,因为使用这2个数组的函数的形参是uchar形,所以编译就也是不能通过的。 我再尝试看看宏定义法,改一下函数。

  • 2019-03-01
  • 发表了主题帖: 关于msp430fr2000的内存FRAM的问题!!

    我在使用MSP430FR2000的时候,因为是内存小,价格便宜,引脚少。我们才选择了他,但是现在遇到了他的内存的问题。 我在写程序的时候,引入了ds1302的头文件,但是问题就随之而来了。因为这个单片机的fram只有0.5K.     FRAM                    : origin = 0xFE00, length = 0x180 ds1302里面有2个地址数组: static uchar  READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; static uchar  WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; 只要有这2个数组在程序里面,编译就是不通过。提示:profram will not fit into available memory,placement with alignment fails for section "ALL_FRAM" size 0x376. 我百度过,网上的解决方法好像是手动修改CMD文件里面的FRAM的长度。但是我真不知道该怎么该,有点懵。 我还试过把这个全局变量放到要用的函数里面。也不行,解决不了。 求求大佬帮忙看一下 编译软件是CCSV8.3

  • 回复了主题帖: 使用MSP430FR2000的一些心得与例程

    懒猫爱飞 发表于 2019-2-27 23:16 1) 实时总结,这个习惯,很好!希望您能一直坚持下去,也希望您能多在坛子里多总结一些东西^_^ 2) 给点 ...
    谢谢你,我会注意的。

  • 回复了主题帖: 使用MSP430FR2000的一些心得与例程

    tiankai001 发表于 2019-2-28 09:17 串口发不出东西,用示波器看看串口发送端有无数据。 430数据手册有一句话:端口即使被设为第二功能,端口 ...
    的确我只是复用了 没有设置输出输入方向 我学长给我提到过这个问题,但是我没注意 谢谢

  • 2019-02-27
  • 发表了日志: 使用MSP430FR2000的一些心得与例程

  • 发表了主题帖: 使用MSP430FR2000的一些心得与例程

      前段时间,因为项目原因我接触了MSP430FR2000单片机。因为以前多数时间用的是MSP430F5529,所以在上手这款单片机时虽然比较简单,但是还是有一定的困难,因为FR2000与F5529的寄存器差别还是存在,网上又查不到相应的一些例程。只有自己看着以前的5529去写。以下是一些成功的程序: PWM模块: void PWM_Init(void) {     P2DIR |= BIT0 ;     P2SEL0 |= BIT0 ;     TB0CCR0 = 1000;     TB0CCTL1 = OUTMOD_7;     TB0CCR1 = 500;     TB0CTL |= MC_1 + TBSSEL__ACLK + TBCLR; } 时钟初始化模块: void CLK_init(void) {     CSCTL3 |= FLLREFDIV__1 + SELREF_1;              //1分频 , 参考时钟REFCLK     __bis_SR_register(SCG0);//关闭FLL     CSCTL0 = 0x00;     CSCTL1 |= DCORSEL_2 + 0;     CSCTL2 |= FLLD__1 + 31;     __bic_SR_register(SCG0);//开启FLL     CSCTL4 |= SELMS__REFOCLK + SELA__REFOCLK ;     CSCTL5 |= DIVM__1 + DIVS__1 + DIVA__1;     CSCTL8 = 0; } 串口模块(按道理说,我觉得这个是没问题的,但是串口发不出东西): void USART_Init(void) {    P1SEL0 |= BIT2 + BIT3;    UCA0CTLW0 = UCSWRST;    UCA0CTLW0 |= UCSSEL__ACLK ;    UCA0BR0 = 3;    UCA0BR1 = 0x00;    UCA0MCTLW = UCBRS3 + UCBRF0;    UCA0CTLW0 &=~ UCSWRST;    UCA0IE |= UCRXIE; } void Uart1send(u8 cm) { while(!(UCA0IFG & UCTXIFG)); UCA0TXBUF = cm; } void Uart1sendcom(u8 *cmd) {     while(*cmd != '\0')     {     Uart1send(*cmd);     cmd++;     } } 还有一点非常非常重要的,因为我在选型这款单片机的时候就是看见了他的芯片手册写了RTC功能,但是在我把芯片买了板子打出来准备写RTC程序时,才发现这款单片机的RTC的真实名字是RTC_COUNTER,仅仅是用作计数器的RTC模块(注意:这里不是实时时钟RTC)。所以并不能满足我的需要。这就造成了时间与精力上的浪费,希望大家别像我一样。

最近访客

< 1/1 >

统计信息

已有16人来访过

  • 芯币:50
  • 好友:--
  • 主题:6
  • 回复:10
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言