打印

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

[复制链接]
楼主: xlhtracy
手机看帖
扫描二维码
随时随地手机跟帖
201
偏爱番茄酱 发表于 2015-4-5 16:52
MSP430怎么将系统时钟输出?

看手册,引脚图,有些引脚的第二功能就是输出时钟,直接选择其第二功能即可。

使用特权

评论回复
202
昱枫| | 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 的高串行通信速率,时钟太低,配置后的波特率是否有误差还是一个问题,如果误差过大就会有误码的可能、
所以应该还是需要从多个角度考虑下

使用特权

评论回复
203
112207301219| | 2015-4-6 22:51 | 只看该作者
数码小叶 发表于 2015-4-5 08:31
外围那就要看电路设计了,肯定的

设计时可以适当使用继电器或者mos管做电子开关,某些模块不用时指节断其电源,使用时再重新初始化。当然还得看具体情况。有些模块本身就有低功耗模式,休眠时只有几个到几十个uA,就没必要这么干了。

使用特权

评论回复
204
昱枫| | 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

所以肯定是子系统的时钟频率高了

使用特权

评论回复
205
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的也可以,应该都是通的吧?

使用特权

评论回复
206
昱枫| | 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" 。。。
看是否有相应的字符,在做出相应的动作

使用特权

评论回复
207
112207301219| | 2015-4-6 23:04 | 只看该作者
songchenping 发表于 2015-4-4 12:58
真正的低功耗是如何降低外围设备的功耗。尽可能的将外围设备的时钟能够细化一些。将不用的外设的时钟disa ...

是的,任何设计都是追求性能和功耗的平衡,不能顾此失彼。

使用特权

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

我们这里149都是用的8M,430有些系列有锁相环,使用内部震荡源时精度会有所提高。

使用特权

评论回复
209
112207301219| | 2015-4-6 23:37 | 只看该作者
songchenping 发表于 2015-4-4 19:30
真正的低功耗是在性能和功耗之间去寻找一个大家可以接受的平衡点。走路肯定比跑步消耗的能量小,但是走路 ...

每时每刻低功耗,这个确实有难度,一般不都是通过休眠降低平均功耗吗?

使用特权

评论回复
210
112207301219| | 2015-4-6 23:42 | 只看该作者
112207301219 发表于 2015-4-3 21:08
实测内部晶振更省电

更正,应该是内部DCO

使用特权

评论回复
211
112207301219| | 2015-4-6 23:54 | 只看该作者
mintspring 发表于 2015-4-2 22:14
你说的很对,这根本不会收到一个字符串,一次只能收到一个字符,对吧? ...

必须的啊!接收字符串当然是要用程序实现啊,值得注意的是字符串首尾要加帧头帧尾做标识(帧头帧尾可以自定义,最好用不常用的字符),否则很可能会收不到完整的字符串,或者重复收到,导致出错。

使用特权

评论回复
212
112207301219| | 2015-4-7 00:13 | 只看该作者
gaoyang9992006 发表于 2015-4-3 13:28
每次只收一个字节的,我们可以这样,不是有停止位和启动位吗,先建立一个规则,把这个指令放到规则里,我 ...

就是自定义帧头帧尾的意思吧,比如定义#S为帧头,E*为帧尾。要发送“LED_ON”就发送“#SLED_ONE*”,接收时通过判断就知道哪是开始哪是结束了。从而去头去尾,提取出正确的字符串。

使用特权

评论回复
213
songchenping| | 2015-4-7 07:38 | 只看该作者
112207301219 发表于 2015-4-6 23:37
每时每刻低功耗,这个确实有难度,一般不都是通过休眠降低平均功耗吗? ...

这个和应用场合有关系的。休眠就意味着要牺牲一部分功能。但是有的场合牺牲这部分功能可以接受,比如电表或者天然气表,平时是不读取的。但是有些场合时不能牺牲的,就好比我们现在正在做的项目:2线制4~20mA 接口变送器模块,功能一样不能少,功耗必须在3.5mA以下。

使用特权

评论回复
214
uestc_zyd| | 2015-4-7 09:01 | 只看该作者
uestc_zyd 发表于 2015-4-6 22:57
我有一个困惑:“前面讲了那么多函数的含义以及具体各参数值的含义,感觉都很难简单。但是真到了解决具体 ...

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

c51程序集锦.rar

543.76 KB

MCS-51系列单片机Keil C语言源程序集.rar

512.04 KB

0-999计数器.rar

118.29 KB

4X4矩阵键盘(查表法).rar

116.31 KB

4x4矩阵键盘实验(计算法).rar

117.56 KB

4路抢答器.rar

11.14 KB

8位数码管秒表程序.rar

17.31 KB

18B20 1602LCD温度实验(C语言).rar

415.65 KB

18b20测温数码管显示实验.rar

190.1 KB

24C08多花样流水等实验.rar

150.11 KB

24C08开机计数实验.rar

15.26 KB

999秒倒计时程序.rar

115.38 KB

1602LCD 89C51 DS1302时钟实验.rar

473.35 KB

1602LCD串行方式显示.rar

14.21 KB

1602LCD简单时钟显示实验.rar

411.95 KB

1602从右到左移动显示字符实验.rar

430.57 KB

12864 DS1302时钟 18B20温度计.rar

266.5 KB

12864串行驱动演示.rar

15.09 KB

12864中文显示测试.rar

14.4 KB

LCD1602 滚动显示(C语言编写).rar

293.6 KB

LCD1602 移动显示C.rar

284.33 KB

LED左右闪灯实验.rar

8.81 KB

PWM控制LED灯渐亮渐灭实验.rar

146.45 KB

按键加1数码管显示.rar

8.76 KB

本站原创 PC与单片机双向通讯智能温控程序.rar

2.4 MB

播放音乐实验(C语言).rar

94.91 KB

遥控解码通过电脑串口显示.rar

12.27 KB

使用特权

评论回复
215
数码小叶| | 2015-4-7 09:05 | 只看该作者
112207301219 发表于 2015-4-6 22:51
设计时可以适当使用继电器或者mos管做电子开关,某些模块不用时指节断其电源,使用时再重新初始化。当然 ...

低功耗产品中应该不会出现继电器吧,一般选器件时注意一下

使用特权

评论回复
216
数码小叶| | 2015-4-7 09:17 | 只看该作者
uestc_zyd 发表于 2015-4-6 22:57
我有一个困惑:“前面讲了那么多函数的含义以及具体各参数值的含义,感觉都很难简单。但是真到了解决具体 ...

“真到了解决具体问题的时候又感觉无从下手”多写,唯一解决办法,碰到问题是好事

使用特权

评论回复
217
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.

使用特权

评论回复
218
gaoyang9992006| | 2015-4-7 10:57 | 只看该作者
songchenping 发表于 2015-4-6 19:11
你以什么得出结论外部时钟比内部时钟省电啊?

:lol他这是一派胡言呢。

使用特权

评论回复
219
gaoyang9992006| | 2015-4-7 10:58 | 只看该作者
112207301219 发表于 2015-4-7 00:13
就是自定义帧头帧尾的意思吧,比如定义#S为帧头,E*为帧尾。要发送“LED_ON”就发送“#SLED_ONE*”,接收 ...

对,就是这个意思。

使用特权

评论回复
220
geqingsong2013| | 2015-4-7 13:52 | 只看该作者
不错,有了函数库,会使得开发时间大大缩短。

使用特权

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

本版积分规则