前言
由于本人加入实验室较晚,起步较迟,目前接触单片机不到10个月,接触过arduino,stc15单片机,熟悉51单片机,STM32单片机,由于上届省电赛采用TI芯片,然后大胆的推测这次不会用TI的MCU,可往往天意弄人,这次承继了上次国赛的两个小车通信要求,但是可以不加视觉,难度均衡国赛,本人想在此短时间速成MSP430f149的使用,完成赛题。今天是江苏省级电赛的第一天。
一、编译、烧录软件
第一个是我购买的淘宝Studing店铺给的芯片资料,其他是b站上热门视频附带的资料,第一个里面我下载了烧录软件
———————————————————————————————————这里做个勘误,我觉得第一个文件夹里面的不太好用,建议用后三个
- 编译平台 IAR(推荐IAR EW430 5.3版本) 管理员打开下载包可以防止之后因为权限原因编译不成功
- ★★★下载需要是.txt文件,在Debug------>Exe 文件夹下面 ★★★
二、宁波欣创f149
1、观看的视频是宁波欣创电子科技的视频资料 外部供电和引脚供电不要同时使用,否则会对芯片造成不可估量的损失
2、芯片引脚电路图 3、资料官网 TI:https://www.ti.com.cn/product/zh-cn/MSP430F149?keyMatch=MSP430F149&tisearch=search-everything&usecase=GPN 欣创:www.avrgcc.com 技术交流栏目 4、建立工程 (1)新建工程 (2)保存为英文路径,不然编译容易出错 (3)保存对话框 关于一些 IAR 工程的配置和基础使用,视频里面有,这里就不提了
三、点亮LED灯
1、关于Options里的一些配置记录
- 当选择软件仿真器的时候,其他都无所谓的
- .h的头文件调用直接放到主函数main.c的路径下,直接编译
- 另外用第三方的软件下载,BSL,不是IAR,所有要输出txt文件
这个是BSL下载器的文件夹,推荐使用MspFet下载(管理员身份打开)
四、仿真器
由于时间紧、任务重,这里暂时先跳过仿真器不看,如果后面有需要再看
五、时钟系统、LED控制
1、区别于MSP430f169:
- f169比f149多一些片内设备,比如说f169有ADC、DAC、I2C,而f149只有ADC,其他基本是一样的。
- 外形一样
小圆点左下为1脚,逆时针,如果接反,长时间上电,烧掉的可能性就非常大
2、有内部时钟,可以不接晶振,接上电源就可以工作 3、48个IO口,P1.0-1.7、P2.0-2.7、…、P6.0-6.7 4、这里讲到复用功能,让我联想到了stm32的复用功能,查找百度得到更好的理解 5、时钟周期要进入一个稳定周期(在代码里表现) 6、高频高功耗,反应快,低频低功耗,反应慢 7、LED程序讲解
LED8
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
void Port_Init()
{
LED8DIR = 0xff;
LED8 = 0x00;
}
void main(void)
{
WDT_Init();
Clock_Init();
Port_Init();
while(1)
{
LED8=0x00;
delay_ms(500);
LED8=0xff;
delay_ms(500);
}
}
LED8_1
#include <msp430x14x.h>
#include "Config.h"
void Port_Init()
{
LED8DIR = 0xff;
LED8 = 0xFF;
}
void main(void)
{
WDT_Init();
Clock_Init();
Port_Init();
while(1)
{
LED8 |= 1<<0;
delay_ms(500);
LED8 &= ~(1<<0);
delay_ms(500);
}
}
输入输出模式和拉灌电流没有关系,在编写中,这里如果要读信号就要输入,写就要输出,MSP430f149就是一个很好的例子,由灌电流输入,低电平控制,但是要输出模式,而51单片机中,由单片机给引脚高电平,输出模式,防止电流倒灌,对单片机造成影响。
六、I/O端口
设置输入、输出或者模式或者引脚第二功能 & 是输入 , | 是输出 用于中断操作的三个寄存器
#include <msp430x14x.h>
#include "Config.h"
uchar key;
void Port_init()
{
P1SEL = 0x00;
P1DIR = 0xF0;
P6SEL = 0x00;
P6DIR = 0xFF;
}
uchar Key_Scan(void)
{
uchar key_check;
uchar key_checkin;
key_checkin=KeyPort;
key_checkin&= 0x0F;
if(key_checkin!=0x0F)
{
delay_ms(20);
key_checkin=KeyPort;
if(key_checkin!=0x1F)
{
key_check=KeyPort;
switch (key_check & 0x0F)
{
case 0x0E:key=1;break;
case 0x0D:key=2;break;
case 0x0B:key=3;break;
case 0x07:key=4;break;
}
}
}
else
{
key=0xFF;
}
return key;
}
void main(void)
{
WDT_Init();
Clock_Init();
Port_init();
delay_ms(100);
while(1)
{
Key_Scan();
if(key!=0xff)
{
{
switch(key)
{
case 1: LED8 = 0xFC;break;
case 2: LED8 = 0xF3;break;
case 3: LED8 = 0xCF;break;
case 4: LED8 = 0x3F;break;
}
}
}
else
{
}
}
}
七、中断系统设置及应用
1、不像51、32单片机既有高低电平中断,也有上升沿和下降沿中断,而MSP430只有上升沿和下降沿中断 2、中断服务程序对应不同的中断有不同的服务程序,是放在中断向量入口地址的位置,当对应的中断源和中断种类来临的时候,中断服务程序就要执行 3、 4、
#include <msp430x14x.h>
#include "Config.h"
uchar key;
void Port_init()
{
P1SEL = 0x00;
P1DIR = 0xF0;
P1IE = 0x0F;
P1IES = 0x0F;
P1IFG = 0x00;
LED8DIR = 0xFF;
LED8 = 0xFF;
}
#pragma vector = PORT1_VECTOR
__interrupt void P1_IRQ(void)
{
switch(P1IFG&0x0F)
{
case 0x01: key=0x01;LED8 = 0xFC;P1IFG=0x00;break;
case 0x02: key=0x02;LED8 = 0xF3;P1IFG=0x00;break;
case 0x04: key=0x03;LED8 = 0xCF;P1IFG=0x00;break;
case 0x08: key=0x04;LED8 = 0x3F;P1IFG=0x00;break;
}
}
void main(void)
{
WDT_Init();
Clock_Init();
Port_init();
delay_ms(100);
_EINT();
while(1);
}
八、看门狗
- 个人理解看门狗就是一个定时复位的程序,到了周期自动复位,如果执行喂狗操作(清除定时器),看门狗不作用(结合51单片机自己大致想了一下,前面寄存器和电路没看,后面我开2倍速,如果有误愿请告知)
- 另外,看门狗还可以作为定时器使用
九、USART串行通信模块(UART)
1、串行:一根线传输数据 并行:八根线传输数据 2、同步:时钟一样,低速传输,如:spi 异步:时钟可以不同,低速传输 3、
- P3.4、P3.5、P3.6、P3.7
- ttl通信:RX—TX,TX—RX 可以实现单片机与单片机之间的通信
- usb转ttl:可以实现电脑和单片机之间的通信
这是 IO口第二功能,需要复用 4、寄存器
5、计算波特率 (1) (2) 6、
#include <msp430x14x.h>
#include "Config.h"
void UART_Init()
{
U0CTL|=SWRST;
U0CTL|=CHAR;
U0TCTL|=SSEL1;
U0BR1=baud_h;
U0BR0=baud_l;
U0MCTL=0x00;
ME1|=UTXE0;
ME1|=URXE0;
U0CTL&=~SWRST;
IE1|=URXIE0;
P3SEL|= BIT4;
P3DIR|= BIT4;
P3SEL|= BIT5;
}
void Send_Byte(uchar data)
{
while((IFG1&UTXIFG0)==0);
U0TXBUF=data;
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
uchar data=0;
data=U0RXBUF;
Send_Byte(data);
}
#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
}
void main(void)
{
WDT_Init();
Clock_Init();
UART_Init();
_EINT();
while(1)
{
}
}
7、串口调试助手
总结
个人感觉f149和32单片机的使用极为相似,甚至Ctrl+F是查找功能都是与keil5一模一样,f149又是老版本的TI芯片,属于TI的MCUf1x系列,就好比stm32f1x系列的分类,对于大众来说还是比较容易上手的,有幸在我认知范围内可以查找到学习资料,十几个小时的教学视频是开了不同的倍速观看的,加之之前对stm32的理解,短时间可以速成,如果有32单片机的基础建议了解一下。 ———————————————————————————————————————————————————————————Verify complete
|