打印

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

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
41
hanzhenfei| | 2015-4-1 21:10 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 hanzhenfei 于 2015-4-1 21:11 编辑
pywmiss 发表于 2015-4-1 16:19
我也在学430,,,,一直用台湾的松翰单片机...
现在学430觉得很多不习惯的...感觉仿真也不那么顺利...拖得好久 ...

当然要先“喂狗”了,不然被”狗咬“了,,呵呵。,在程序编译时,main函数执行还要进行一些初始化工作,设置堆栈啊、初始化内存啊之类的,,,编译器在编译时看门狗定时器默认是打开的。。。不过可以在编译时就关看门狗,。。。

使用特权

评论回复
42
月下飞鸿| | 2015-4-1 21:20 | 只看该作者
看到例程上有这么一段程序:
CS_initClockSignal(CS_MCLK, CS_CLKOCK_DIVIDER_8);
CS_initClockSignal(CS_SMCLK, CS_CLKOCK_DIVIDER_2);
我想问下,这个MCLK和SMCLK一个8分频一个是2分频,他们在选择分频数值的时候是根据什么选择的?还有就是想问一下:8分频之后是不是比2分频之后的频率值小了?为什么MCLK的频率值要比SMCLK的频率值小呢?个人感觉应该要大一些才对……新手,可能问的幼稚了……

使用特权

评论回复
43
hanzhenfei| | 2015-4-1 21:36 | 只看该作者
强仔00001 发表于 2015-4-1 12:15
占座,有些问题:现在的MSP430的DCO产生的时钟频率和接外部晶振产生的频率那个更稳定和准确,还 ...

使用DCO时钟,进入不同低功耗模式,功耗相对应该更低。。

使用特权

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

其实单片机都差不多。呵呵。。不知道松翰单片机怎样,没用过。

使用特权

评论回复
45
hanzhenfei| | 2015-4-1 21:59 | 只看该作者
月下飞鸿 发表于 2015-4-1 21:20
看到例程上有这么一段程序:
CS_initClockSignal(CS_MCLK, CS_CLKOCK_DIVIDER_8);
CS_initClockSignal(CS_S ...

MCLK:主时钟。MCLK可以被1,2,4,8或16分频。MCLK通常被CPU和系统使用。cpu执行指令的时钟。SMCLK:子系统主时钟。SMCLK可以被1,2,4,8或16分频。SMCLK可以被各个外围模块通过软件选择使用。例如定时器可以选择SMCLK时钟作为工作频率,定义一段时间。。。
没有规定两者那个大。。。

使用特权

评论回复
46
dirtwillfly| | 2015-4-1 22:11 | 只看该作者
月下飞鸿 发表于 2015-4-1 21:20
看到例程上有这么一段程序:
CS_initClockSignal(CS_MCLK, CS_CLKOCK_DIVIDER_8);
CS_initClockSignal(CS_S ...

45楼说的比较全了,我再补充一下。
具体选择多少分频,是根据具体需要来选择的。运行频率高,程序执行的快,但功耗就高。还有就是内核和外围模块间的数据传递。

使用特权

评论回复
47
lvyunhua| | 2015-4-1 22:33 | 只看该作者
试着写了下发送和接收程序,接收在中断进行。
uint8_t Rcvdat[10],SendDat[10]i, i=0;

void EUSCI_A_UART_transmitData(EUSCI_A0_BASE,LED);

if(EUSCI_A_UART_receiveData (EUSCI_A0_BASE)=="LED_ON")
{
LED = 0;
}
if(EUSCI_A_UART_receiveData (EUSCI_A0_BASE)=="LED_OFF")
{
LED =1;
}

使用特权

评论回复
48
强仔00001| | 2015-4-1 23:04 | 只看该作者
734774645 发表于 2015-4-1 16:45
楼主,你直接可以使用内部DCO就行了,其他的就别用了,这MCLK和SMCLK只是时钟系统可以提供不同频率的信号 ...

那还是用内部的,有时间做做MSP430低功耗这方面的,最近出了个MSP432,不知道性能咋样

使用特权

评论回复
49
强仔00001| | 2015-4-1 23:09 | 只看该作者
hanzhenfei 发表于 2015-4-1 21:36
使用DCO时钟,进入不同低功耗模式,功耗相对应该更低。。

对,这也是MSP430的优势

使用特权

评论回复
50
强仔00001| | 2015-4-1 23:21 | 只看该作者
dirtwillfly 发表于 2015-4-1 13:22
使用外部晶振更稳定。
至于哪个省电,这个还真不知道。我猜使用DCO更省电 ...

是这样的,具体我还真要做做测试,以前做的东西很少考虑功耗这方面的

使用特权

评论回复
51
强仔00001| | 2015-4-1 23:22 | 只看该作者
pywmiss 发表于 2015-4-1 16:19
我也在学430,,,,一直用台湾的松翰单片机...
现在学430觉得很多不习惯的...感觉仿真也不那么顺利...拖得好久 ...

其实还好吧,也不是很复杂,要是你看飞思卡尔的时钟系统就复杂的去了

使用特权

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

自己上网找资料,然后把官方带的程序都跑一遍,估计就可以算入门了,现在MSP430也有库函数,降低了入门难度了

使用特权

评论回复
53
强仔00001| | 2015-4-1 23:26 | 只看该作者
数码小叶 发表于 2015-4-1 17:06
一般来讲都是外接的吧,也不一样,看你买的啥了,至于省电,内接的DCO有配置寄存器,应该更省 ...

我有msp430G2553,MSP430f5529,和MSP430FR5969,还有几十片样片

使用特权

评论回复
54
强仔00001| | 2015-4-1 23:28 | 只看该作者
yaoyuanytu 发表于 2015-4-1 20:13
可以使用内部晶振,也可以使用外部晶振。我觉得内部晶振可能不那么精确,应该和ST的芯片差不错内部晶振不精 ...

其实你可以配置管脚输出时钟出来看看频率的,我经常这样干

使用特权

评论回复
55
kqh1120| | 2015-4-2 00:02 | 只看该作者
430的突出特点是低功耗,这两节都没有提如何达到低功耗的呢。。。

使用特权

评论回复
56
kqh1120| | 2015-4-2 00:26 | 只看该作者
//前面初始化和例程相同
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);
// 设置DCO使用内部电阻,DCO将被配置在16.384MHz.
CS_setupDCO(CS_INTERNAL RESISTOR);
// SMCLK设置与DCO相同的速度。SMCLK = 16.384MHz
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_1);
// 设置P1.2和P1.3管脚作为UART管脚。P1.4 管脚作为LED输出
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);
// 配置和使能UART外设
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);
/////////////////////////////////////////////////////////
//原谅我的渣渣C语言,LED默认低电平亮


while(1) {
if(EUSCI_A_UART_receiveData (EUSCI_A0_BASE)=="LED_OFF")
{
        GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
}
else if(EUSCI_A_UART_receiveData (EUSCI_A0_BASE)=="LED_ON")
{
        GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN4);
}
else if(EUSCI_A_UART_receiveData (EUSCI_A0_BASE)=="LED_TEST")
{
        GPIO_getInputPinValue (GPIO_PORT_P1, GPIO_PIN4);
        EUSCI_A_UART_ transmitData(EUSCI_A0_BASE, GPIO_getInputPinValue (GPIO_PORT_P1, GPIO_PIN4));
}

}

使用特权

评论回复
57
hanzhenfei| | 2015-4-2 08:12 | 只看该作者
kqh1120 发表于 2015-4-2 00:02
430的突出特点是低功耗,这两节都没有提如何达到低功耗的呢。。。

不同的低功耗模式lpm会关闭一些时钟或模块,合理的分配时钟模块,进入不同低功耗模式这样功耗会大大降低。从lpm0到lpm4.5休眠条件下功耗越来越低的。如果定时器使用ACLK计时2秒,主循环lpm3休眠,2秒时间到退出休眠,住循环执行一次在休眠lpm3.这样cpu大部分时间都处于休眠状态,平均功耗大大降低。还有包括一些不用的io口可以设置为输出低电平,不用的模块都关闭。等等。。。。这些都是降低功耗的方法。

使用特权

评论回复
58
数码小叶| | 2015-4-2 08:35 | 只看该作者
强仔00001 发表于 2015-4-1 23:26
我有msp430G2553,MSP430f5529,和MSP430FR5969,还有几十片样片

壕啊,这么多系列,至今没有机会玩下5529的launchpad

使用特权

评论回复
59
数码小叶| | 2015-4-2 08:57 | 只看该作者
pdf制作的字太小了,感觉没必要分两栏吧,还是看网页舒服

使用特权

评论回复
60
数码小叶| | 2015-4-2 09:07 | 只看该作者
yaoyuanytu 发表于 2015-4-1 20:13
可以使用内部晶振,也可以使用外部晶振。我觉得内部晶振可能不那么精确,应该和ST的芯片差不错内部晶振不精 ...

目前大部分430都支持到16MHz,少部分可以更高,如5系列

使用特权

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

本版积分规则