打印

【MSP430i2xx教程第二讲】时钟系统 & EUSCI_A_UART

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
161

还好吧,很多卖的

使用特权

评论回复
162
dirtwillfly| | 2015-4-4 20:58 | 只看该作者
songchenping 发表于 2015-4-4 20:56
你从这段话里面能看出来是金属膜电阻还是碳膜电阻啊?是直插的还是贴片的啊? ...

和什么类型和封装的电阻没关系,只要精度和温漂能到就行。

使用特权

评论回复
163
dirtwillfly| | 2015-4-4 20:59 | 只看该作者
songchenping 发表于 2015-4-4 20:56
你从这段话里面能看出来是金属膜电阻还是碳膜电阻啊?是直插的还是贴片的啊? ...

一般手册里不会确定的写出周围元器件具体的类型和厂家的,因为技术总在发展,以后会有越来越多的替代元件

使用特权

评论回复
164
songchenping| | 2015-4-4 21:05 | 只看该作者
dirtwillfly 发表于 2015-4-4 20:58
和什么类型和封装的电阻没关系,只要精度和温漂能到就行。

有关系的。我们产品中一概用的都是金属膜的电阻。碳膜的稳定性较差。尤其是在工业环境中。即使金属膜中我们也细化了是用X5R系列还是X7R系列的。测试结果都不一样,不能单单就看精度和温漂来决定的。

使用特权

评论回复
165
dirtwillfly| | 2015-4-4 21:09 | 只看该作者
songchenping 发表于 2015-4-4 21:05
有关系的。我们产品中一概用的都是金属膜的电阻。碳膜的稳定性较差。尤其是在工业环境中。即使金属膜中我 ...

这些是你的应用环境决定的,和msp430的这个功能没关系,只能说你的应用环境比msp430实现这个功能要求的更严格

使用特权

评论回复
166
月下飞鸿| | 2015-4-4 22:10 | 只看该作者
闲着没事,就把课后题给写了一下,根据提供的例程改写。用的是STC单片机串口接收思维,贴出来请各位大神指正,新手,多多包涵
#include <msp430.h>


volatile uint8_t T[7] = "LED_OFF";
volatile uint8_t R[7] = "LED_ON";
volatile uint8_t E[7] = "ERROR";
volatile uint8_t Rec[10];
volatile uint8_t flag=3;

int main(void) {
    EUSCI_A_UART_initParam uartConfig = {
        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source
        8,                                       // BRDIV = 8
        14,                                      // UCxBRF = 14
        34,                                      // UCxBRS = 34
        EUSCI_A_UART_NO_PARITY,                  // No Parity
        EUSCI_A_UART_MSB_FIRST,                  // MSB First
        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit
        EUSCI_A_UART_MODE,                       // UART mode
        EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION  // Oversampling Baudrate
    };

    WDT_hold(WDT_BASE);

    // Setting the DCO to use the internal resistor. DCO will be at 16.384MHz
    CS_setupDCO(CS_INTERNAL_RESISTOR);

    // SMCLK should be same speed as DCO. SMCLK = 16.384MHz
    CS_initClockSignal(CS_SMCLK, CS_CLOCK_DIVIDER_1);

    // Settings P1.2 and P1.3 as UART pins. P1.4 as LED output
    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
                                               GPIO_PIN2 | GPIO_PIN3,
                                               GPIO_PRIMARY_MODULE_FUNCTION);
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);

    // Configure and enable the UART peripheral
    EUSCI_A_UART_init(EUSCI_A0_BASE, &uartConfig);
    EUSCI_A_UART_enable(EUSCI_A0_BASE);

    EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,
                                 EUSCI_A_UART_RECEIVE_INTERRUPT);

    while(1)
    {
            uint8_t i;
            while(EUSCI_A_UART_receiveData(EUSCI_A0_BASE)!='') //读取接收到的信息,如果不为空,则开始接收
                              
                    for(i=0;i<8;i++)
                            Rec[i]=EUSCI_A_UART_receiveData(EUSCI_A0_BASE); //将接收到的信息放到数组Rec中
                    if(Rec[5]=='N')                                     //判断接收到数组的第五位。因为LED_ON、LED_OFF与LED_TEST从第五位开始不同,如果为N,则为LED_ON
                    {
                            GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
                            GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
                            flag=0;                                                                                        //点亮LED的同时,置标志位flag=0;当flag=0时,说明是灯是开着的
                           
                    }
                    else if(Rec[5]=='F')                                                                //判断接收到数组的第五位。因为LED_ON、LED_OFF与LED_TEST从第五位开始不同,如果为F,则为LED_OFF
                    {
                            GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN4);
                            GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN4);
                            flag=1;                                                                                 //关闭LED的同时,将flag=1;说明此时为LED_OFF
                    }
                    else if(Rec[5]=='E')                                                                //判断接收到数组的第五位。因为LED_ON、LED_OFF与LED_TEST从第五位开始不同,如果为E,则为LED_TEST
                    {
                            if(flag==0)                                                                                //读取此时的标志位,若flag=0;则说明是LED_ON,然后将R【7】=LED_ON发送出去
                            {
                                    for(i=0;i<8;i++)
                                            EUSCI_A_UART_transmitData(EUSCI_A0_BASE, R[i]);
                            }
                            else if(flag==1)                                                                //读取此时的标志位,若flag=1;则说明是LED_OFF,然后将R【7】=LED_OFF发送出去
                            {
                                    for(i=0;i<8;i++)
                                             EUSCI_A_UART_transmitData(EUSCI_A0_BASE, T[i]);
                            }
                            else                                                                                        //读取此时的标志位,若flag既不是0也不是1,;则发送ERROR
                            {
                                    for(i=0;i<8;i++)
                                             EUSCI_A_UART_transmitData(EUSCI_A0_BASE, E[i]);
                            }       
                                   
                    }
                           

          __bis_SR_register(LPM0_bits | GIE);
    }
}

使用特权

评论回复
167
数码小叶| | 2015-4-5 08:19 | 只看该作者
112207301219 发表于 2015-4-3 21:59
打印出来看着挺舒服的

额。。。。好吧,没试过打印出来

使用特权

评论回复
168
数码小叶| | 2015-4-5 08:31 | 只看该作者
songchenping 发表于 2015-4-4 12:58
真正的低功耗是如何降低外围设备的功耗。尽可能的将外围设备的时钟能够细化一些。将不用的外设的时钟disa ...

外围那就要看电路设计了,肯定的

使用特权

评论回复
169
hanzhenfei| | 2015-4-5 08:36 | 只看该作者
数码小叶 发表于 2015-4-5 08:21
就是返回0,给你看下库函数说明的返回值说明:

这个我有看到,源文件函数是这样的。
uint32_t CS_getSMCLK(void) {
    uint8_t divider = (CSCTL1 & 0x70) >> 4;
    return(CS_DCO_FREQ >> divider);
}
怎样返回零呢?难道在bypass模式下cs_dco_freq=0??

使用特权

评论回复
170
数码小叶| | 2015-4-5 08:39 | 只看该作者
hanzhenfei 发表于 2015-4-5 08:36
这个我有看到,源文件函数是这样的。
uint32_t CS_getSMCLK(void) {
    uint8_t divider = (CSCTL1 & 0x ...

你看下结构图就明白了,DCO被停止了

使用特权

评论回复
171
数码小叶| | 2015-4-5 08:39 | 只看该作者
hanzhenfei 发表于 2015-4-5 08:36
这个我有看到,源文件函数是这样的。
uint32_t CS_getSMCLK(void) {
    uint8_t divider = (CSCTL1 & 0x ...

结构图前面有人发了,我就不发了,你找一下

使用特权

评论回复
172
昱枫| | 2015-4-5 13:52 | 只看该作者
数码小叶 发表于 2015-4-5 08:38
肯定有啊,看截图

好吧,没仔细看,感谢:lol

使用特权

评论回复
173
数码小叶| | 2015-4-5 14:23 | 只看该作者
昱枫 发表于 2015-4-5 13:52
好吧,没仔细看,感谢

不用谢,共同学习:):):)

使用特权

评论回复
174
偏爱番茄酱| | 2015-4-5 16:12 | 只看该作者
pywmiss 发表于 2015-4-1 16:52
是的..基本的都学习了..DCO.跟松翰单片机...一样都是内置的晶振....就是搞太久了...越来越没有动力..呵呵 ...

了解一些

使用特权

评论回复
175
偏爱番茄酱| | 2015-4-5 16:25 | 只看该作者

本人是土人,对430单片机有点陌生,430单片机有14引脚的么?

使用特权

评论回复
176
sharknarduo| | 2015-4-5 16:26 | 只看该作者
偏爱番茄酱 发表于 2015-4-5 16:25
本人是土人,对430单片机有点陌生,430单片机有14引脚的么?

430单片机有14引脚的,:)

使用特权

评论回复
177
偏爱番茄酱| | 2015-4-5 16:27 | 只看该作者
sharknarduo 发表于 2015-4-5 16:26
430单片机有14引脚的,

430系列单片机,有哪些是有14引脚的?:D

使用特权

评论回复
178
sharknarduo| | 2015-4-5 16:28 | 只看该作者
偏爱番茄酱 发表于 2015-4-5 16:27
430系列单片机,有哪些是有14引脚的?

比如msp430F2131、msp430F2211等等:loveliness:

使用特权

评论回复
179
sharknarduo| | 2015-4-5 16:28 | 只看该作者
偏爱番茄酱 发表于 2015-4-5 16:27
430系列单片机,有哪些是有14引脚的?

可以看一下MSP430G2系列的单片机,基本上都是有14pin的~

使用特权

评论回复
180
偏爱番茄酱| | 2015-4-5 16:31 | 只看该作者
  我的板子上引出了P1.1~P1.4等多个外接IO,均上拉,用于外部中断输入。我只打开其中某个IO中断(比如P1.1),其他端口

禁止中断,但是外部向P1.1发生中断时,其他端口(P1.2~P1.3)中断标志位有时候居然也会被置位,非常奇怪!

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则