请问怎么用msp430产生一个1M的方波?是不是只要把时钟源选为高频晶振就可以了?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
要想在MSP430上获取一个1M的方波,有三个办法,取决于你的应用:
1. 用内部经过校准的DCO,配置到1M的倍数,SMCL或ACLK选择DCO分频为1M作为时钟源,利用GPIO口输出SMCL和ACLK。
优点: 除了GPIO,不占用MCU的其他资源,也不增加CPU的负荷, CPU主频可以设置得较低,比如1MHZ.
缺点: 只能在指定管脚输出波形。
2. 用TIMER的CCP来实现,具体实现的方法有多种,这里介绍一种代码:
优点: 可以在指定的几个管脚实现PWM波形输出
缺点: 占用TIMER资源,CPU负载中等
3. 用TIMER定时,在定时中断切换GPIO口来实现
优点: 可以在任意管脚输出
缺点: 占用TIMER资源, CPU负荷高
具体可以根据你应用的需要选择合适的方法。
可以产生一个占空比固定的方波.
给你一个例程,你直接用SMCLK输出作为方波吧,这样最简单。
以MSP430G2553为例,其他芯片请找出输出SMCLK的管脚,查看数据手册操作。
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if ((CALBC1_8MHZ ==0xFF) && (CALDCO_8MHZ == 0xFF))
{
BCSCTL1 = 0x8D; // 设置DCO为8Mhz
DCOCTL = 0x60; }
else
{
BCSCTL1 = CALBC1_8MHZ; // 设置DCO为8Mhz
DCOCTL = CALDCO_8MHZ;
}
BCSCTL2 |=0x36; // SMCLK 8分频成1M, ACLK8分频成1M
P1DIR |= 0x91; // P1.4 SMCLK
P1SEL |= 0x11; // 1.0 ACLK
while(1)
{
}