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

[复制链接]
42014|276
112207301219 发表于 2015-4-6 22:30 | 显示全部楼层
偏爱番茄酱 发表于 2015-4-5 16:52
MSP430怎么将系统时钟输出?

看手册,引脚图,有些引脚的第二功能就是输出时钟,直接选择其第二功能即可。
昱枫 发表于 2015-4-6 22:46 | 显示全部楼层

设置DCO使用内部电阻,DCO将被配置在16.384MHz时
CS_setupDCO(CS_INTERNAL RESISTOR);

设置不同的SMCLK频率配置UART模块波特率为115200
会有多种不同的方式
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_1);
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_2);
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_4);
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_8);
CS_initClockSignal(CS_SMCLK, CS_CLOCK DIVIDER_16);


因而对应的不同的初始化配置
EUSCI_A_UART_ initParam uartConfig = {
EUSCI_A_UART_ CLOCKSOURCE SMCLK, // SMCLK Clock Source
BRDIV
UCxBRF,
UCxBRS ,
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
};
如下图所示的计算可方面设置
BRDIV,UCxBRF,UCxBRS ,











仔细考虑下,配置不同的外设时钟,时钟越低,功耗应该就相对越低了,所以从功耗的角度考虑选择低频应该好些
但是由于需要配置115200 的高串行通信速率,时钟太低,配置后的波特率是否有误差还是一个问题,如果误差过大就会有误码的可能、
所以应该还是需要从多个角度考虑下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
112207301219 发表于 2015-4-6 22:51 | 显示全部楼层
数码小叶 发表于 2015-4-5 08:31
外围那就要看电路设计了,肯定的

设计时可以适当使用继电器或者mos管做电子开关,某些模块不用时指节断其电源,使用时再重新初始化。当然还得看具体情况。有些模块本身就有低功耗模式,休眠时只有几个到几十个uA,就没必要这么干了。
昱枫 发表于 2015-4-6 22:55 | 显示全部楼层
月下飞鸿 发表于 2015-4-1 21:20
看到例程上有这么一段程序:
CS_initClockSignal(CS_MCLK, CS_CLKOCK_DIVIDER_8);
CS_initClockSignal(CS_S ...

void CS_setupDCO( uint8_t mode )
  使用参数所选模式配置DCO。如果选择旁路模式,则需要在CLKIN管脚接入外部数字时钟信号来作为所有的设备(CPU、外设等)的时钟信号。ACLK频率是不可以被编程的,且固定在旁路时钟频率除以512。使用外部吊足模式,需要在ROSC管脚连接一个20KΩ的电阻器。与使用内部电阻相比,使用外部电阻模式,在绝对误差和温度漂移上,可以提供更高的时钟精度。请根据你所选的设备型号对应的数据手册的详细情况来选择不同的模式。
  该函数只有一个参数:mode。
  mode:该参数可以选择的量有CS_INTERNAL_RESISTOR,CS_EXTERNAL_RESISTOR,CS_BYPASS_MODE。
  返回值:空。
  注释:DCO的配置可以使用内部电阻和外部电阻,还有一个就是旁路模式,旁路模式就是可以通过一个时钟输入管脚将外部时钟信号灌入系统。

首先是要选择时钟源,比如  CS_setupDCO(CS_INTERNAL_RESISTOR); 也就是配置时钟的内部电阻模式
DCO频率为16.384MHz.

CS_initClockSignal(CS_MCLK, CS_CLKOCK_DIVIDER_8);
表示将主系统的时钟配置为2.048MHZ

CS_initClockSignal(CS_SMCLK, CS_CLKOCK_DIVIDER_2);
表示将子系统的时钟配置为8.196MHZ

所以肯定是子系统的时钟频率高了
uestc_zyd 发表于 2015-4-6 22:57 | 显示全部楼层
xlhtracy 发表于 2015-4-1 10:41
4.3  例程例程将展示怎样使用EUSCI_A_UART API 来初始化EUSCI_A_UART并开始发送字符。// 使用SMCLK频率为16 ...

我有一个困惑:“前面讲了那么多函数的含义以及具体各参数值的含义,感觉都很难简单。但是真到了解决具体问题的时候又感觉无从下手,看了例程后又觉得做起来也不是很难。”我觉得这就是学与做的区别,做的是学的东西的综合应用,做多了就固化在自己脑子中了。

所以,我想问一下,哪位有一些可以实践的例子分享一下,多看一些例程,不是针对430的也可以,应该都是通的吧?
昱枫 发表于 2015-4-6 23:03 | 显示全部楼层
kqh1120 发表于 2015-4-2 00:26
//前面初始化和例程相同
EUSCI_A_UART_ initParam uartConfig = {
EUSCI_A_UART_ CLOCKSOURCE SMCLK, // SM ...

void EUSCI_A_UART_receiveData (uint16_t baseAddress)
接收一个字节数据
而且无返回值,与那个“LED_..”字符串比较肯定得不到正确的结果
应该需要把接收到的数据都存储起来
然后在接收的字符串中查找 "LED_ON" "LED_OFF" 。。。
看是否有相应的字符,在做出相应的动作
112207301219 发表于 2015-4-6 23:04 来自手机 | 显示全部楼层
songchenping 发表于 2015-4-4 12:58
真正的低功耗是如何降低外围设备的功耗。尽可能的将外围设备的时钟能够细化一些。将不用的外设的时钟disa ...

是的,任何设计都是追求性能和功耗的平衡,不能顾此失彼。
112207301219 发表于 2015-4-6 23:21 来自手机 | 显示全部楼层
yaoyuanytu 发表于 2015-4-1 20:13
可以使用内部晶振,也可以使用外部晶振。我觉得内部晶振可能不那么精确,应该和ST的芯片差不错内部晶振不精 ...

我们这里149都是用的8M,430有些系列有锁相环,使用内部震荡源时精度会有所提高。
112207301219 发表于 2015-4-6 23:37 来自手机 | 显示全部楼层
songchenping 发表于 2015-4-4 19:30
真正的低功耗是在性能和功耗之间去寻找一个大家可以接受的平衡点。走路肯定比跑步消耗的能量小,但是走路 ...

每时每刻低功耗,这个确实有难度,一般不都是通过休眠降低平均功耗吗?
112207301219 发表于 2015-4-6 23:42 来自手机 | 显示全部楼层
112207301219 发表于 2015-4-3 21:08
实测内部晶振更省电

更正,应该是内部DCO
112207301219 发表于 2015-4-6 23:54 来自手机 | 显示全部楼层
mintspring 发表于 2015-4-2 22:14
你说的很对,这根本不会收到一个字符串,一次只能收到一个字符,对吧? ...

必须的啊!接收字符串当然是要用程序实现啊,值得注意的是字符串首尾要加帧头帧尾做标识(帧头帧尾可以自定义,最好用不常用的字符),否则很可能会收不到完整的字符串,或者重复收到,导致出错。
112207301219 发表于 2015-4-7 00:13 来自手机 | 显示全部楼层
gaoyang9992006 发表于 2015-4-3 13:28
每次只收一个字节的,我们可以这样,不是有停止位和启动位吗,先建立一个规则,把这个指令放到规则里,我 ...

就是自定义帧头帧尾的意思吧,比如定义#S为帧头,E*为帧尾。要发送“LED_ON”就发送“#SLED_ONE*”,接收时通过判断就知道哪是开始哪是结束了。从而去头去尾,提取出正确的字符串。
songchenping 发表于 2015-4-7 07:38 | 显示全部楼层
112207301219 发表于 2015-4-6 23:37
每时每刻低功耗,这个确实有难度,一般不都是通过休眠降低平均功耗吗? ...

这个和应用场合有关系的。休眠就意味着要牺牲一部分功能。但是有的场合牺牲这部分功能可以接受,比如电表或者天然气表,平时是不读取的。但是有些场合时不能牺牲的,就好比我们现在正在做的项目:2线制4~20mA 接口变送器模块,功能一样不能少,功耗必须在3.5mA以下。
uestc_zyd 发表于 2015-4-7 09:01 | 显示全部楼层
uestc_zyd 发表于 2015-4-6 22:57
我有一个困惑:“前面讲了那么多函数的含义以及具体各参数值的含义,感觉都很难简单。但是真到了解决具体 ...

我自己找了一些资料,共享给大家,希望能有些帮助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
数码小叶 发表于 2015-4-7 09:05 | 显示全部楼层
112207301219 发表于 2015-4-6 22:51
设计时可以适当使用继电器或者mos管做电子开关,某些模块不用时指节断其电源,使用时再重新初始化。当然 ...

低功耗产品中应该不会出现继电器吧,一般选器件时注意一下
数码小叶 发表于 2015-4-7 09:17 | 显示全部楼层
uestc_zyd 发表于 2015-4-6 22:57
我有一个困惑:“前面讲了那么多函数的含义以及具体各参数值的含义,感觉都很难简单。但是真到了解决具体 ...

“真到了解决具体问题的时候又感觉无从下手”多写,唯一解决办法,碰到问题是好事
gaoyang9992006 发表于 2015-4-7 10:55 | 显示全部楼层
昱枫 发表于 2015-4-6 22:46
当 设置DCO使用内部电阻,DCO将被配置在16.384MHz时CS_setupDCO(CS_INTERNAL RESISTOR);[/bac ...

朋友,你这个图上显示,你搞错了,这个外设是EUSCI_A_UART模块,EUSCI,你选择的是USCI.
gaoyang9992006 发表于 2015-4-7 10:57 | 显示全部楼层
songchenping 发表于 2015-4-6 19:11
你以什么得出结论外部时钟比内部时钟省电啊?

:lol他这是一派胡言呢。
gaoyang9992006 发表于 2015-4-7 10:58 | 显示全部楼层
112207301219 发表于 2015-4-7 00:13
就是自定义帧头帧尾的意思吧,比如定义#S为帧头,E*为帧尾。要发送“LED_ON”就发送“#SLED_ONE*”,接收 ...

对,就是这个意思。
geqingsong2013 发表于 2015-4-7 13:52 | 显示全部楼层
不错,有了函数库,会使得开发时间大大缩短。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部