前言
由于本人加入实验室较晚,起步较迟,目前接触单片机不到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
//调试环境:EW430 V5.30
//作者:www.avrgcc.com
//时间:2014.03.01
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
//***********************************************************************
// MSP430IO口初始化
//***********************************************************************
void Port_Init() //IO口初始化
{
LED8DIR = 0xff; //设置IO口方向为输出
LED8 = 0x00; //初始设置为00 全亮
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
WDT_Init(); //看门狗设置,这个函数是必须的,防止程序跑飞,一般在学习的过程中是把看门狗的程序关闭的,不工作,打开必须喂狗,程序就会复位
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
while(1)
{
LED8=0x00; //点亮LED
delay_ms(500); //延迟函数是IAR自带的一个函数
LED8=0xff; //熄灭LED
delay_ms(500);
}
}
LED8_1
/********************************************************************
//DM430-L型最小系统板控制1个发光二极管闪烁测试程序
//发光二极管使用D1,同时可以用于指示串口数据
//调试环境:EW430 V5.30
//作者:www.avrgcc.com
//时间:2014.03.01
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
//***********************************************************************
// MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
LED8DIR = 0xff; //设置IO口方向为输出
LED8 = 0xFF; //初始设置为00
}
//***********************************************************************
// 主程序
//***********************************************************************
void main(void)
{
WDT_Init();
Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
while(1)
{
LED8 |= 1<<0; //对某一位置1 //如果要显示闪烁别的灯,改后面0为其他就可以(0~7) 0是低位对于LED8
delay_ms(500);
LED8 &= ~(1<<0);//对某一位置0
delay_ms(500);
}
}
输入输出模式和拉灌电流没有关系,在编写中,这里如果要读信号就要输入,写就要输出,MSP430f149就是一个很好的例子,由灌电流输入,低电平控制,但是要输出模式,而51单片机中,由单片机给引脚高电平,输出模式,防止电流倒灌,对单片机造成影响。
六、I/O端口
设置输入、输出或者模式或者引脚第二功能
& 是输入 , | 是输出
用于中断操作的三个寄存器
/********************************************************************
//DM430-L型最小系统板4位独立按键测试程序,采用查询模式
//按不同的按键,显示不同的LED灯,具体请看程序
//调试环境:EW430 V5.30
//作者:www.avrgcc.com
//时间:2014.03.01
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
uchar key;
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
P1SEL = 0x00; //P1普通IO功能,当作为普通IO时可以不用设置,这里只是给大家一个明确概念要设置
P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻
P6SEL = 0x00; //P6口普通IO功能
P6DIR = 0xFF; //P6口输出模式
}
//**********************************************************************
// 键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************
uchar Key_Scan(void)
{
uchar key_check;
uchar key_checkin;
key_checkin=KeyPort; //读取IO口状态,判断是否有键按下
key_checkin&= 0x0F; //读取IO口状态,判断是否有键按下
if(key_checkin!=0x0F) //IO口值发生变化则表示有键按下
{
delay_ms(20); //键盘消抖,延时20MS
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(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
while(1)
{
Key_Scan(); //利用查询方式,独立式键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4
{
{
switch(key)
{
case 1: LED8 = 0xFC;break; //给不同的键赋键值,键值1,亮2个LED灯
case 2: LED8 = 0xF3;break; //给不同的键赋键值,键值2,亮2个LED灯
case 3: LED8 = 0xCF;break; //给不同的键赋键值,键值3,亮2个LED灯
case 4: LED8 = 0x3F;break; //给不同的键赋键值,键值4,亮2个LED灯
}
}
}
else
{
//LED=key; //没有按键的时候显示上次的键值
}
}
}
七、中断系统设置及应用
1、不像51、32单片机既有高低电平中断,也有上升沿和下降沿中断,而MSP430只有上升沿和下降沿中断
2、中断服务程序对应不同的中断有不同的服务程序,是放在中断向量入口地址的位置,当对应的中断源和中断种类来临的时候,中断服务程序就要执行
3、
4、
/********************************************************************
//DM430-L型最小系统板4位独立按键作为中断按键使用测试程序,下降沿触发
//按不同的按键,显示不同的LED灯,具体请看程序,测试外部中断功能
//调试环境:EW430 V5.30
//作者:www.avrgcc.com
//时间:2014.03.01
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
uchar key;
//*************************************************************************
// 初始化IO口子程序
//*************************************************************************
void Port_init()
{
P1SEL = 0x00; //P1普通IO功能
P1DIR = 0xF0; //P10~P13输入模式,外部电路已接上拉电阻
P1IE = 0x0F; //开启P1低四位中断
P1IES = 0x0F; //下降沿触发中断
P1IFG = 0x00; //软件清零中断标志寄存器
LED8DIR = 0xFF; //P6口输出模式
LED8 = 0xFF; //先关闭所有LED
}
//**********************************************************************
// P1口中断服务程序,需要判断
//**********************************************************************
#pragma vector = PORT1_VECTOR //定义一下中断向量,PORT1_VECTOR中断向量
__interrupt void P1_IRQ(void) //中断服务函数的申明,__interrupt中断关键字,P1_IRQ自己起的名字
{
switch(P1IFG&0x0F)
{
case 0x01: key=0x01;LED8 = 0xFC;P1IFG=0x00;break; // 引脚0对应S1中断,必须手动清标志位,点亮D1D2
case 0x02: key=0x02;LED8 = 0xF3;P1IFG=0x00;break; // 引脚1对应S2中断,必须手动清标志位,点亮D3D4
case 0x04: key=0x03;LED8 = 0xCF;P1IFG=0x00;break; // 引脚2对应S3中断,必须手动清标志位,点亮D5D6
case 0x08: key=0x04;LED8 = 0x3F;P1IFG=0x00;break; // 引脚3对应S4中断,必须手动清标志位,点亮D7D8
}
}
//*************************************************************************
// 主程序
//*************************************************************************
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
Port_init(); //系统初始化,设置IO口属性
delay_ms(100); //延时100ms
_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、
/********************************************************************
//DM430-L型最小系统板串口测试程序,使用单片机的串口0
//使用板载BSL模块或者用户外接串口线到DB9,要求是直连公对母串口线
//使用串口调试助手发送数据到系统板,比如02,03等
//系统板会将收到的数据再发送到串口调试助手,接收采用中断模块,发送用查询
//板载的BSL模块可以通过跳线帽设置为USB转串口模式,笔记本电脑没有串口可以直接代替
//开发板的BSL_Config区的RXD和TXD0连接,TXD和RXD0连接即可,另外2个跳线帽取下
//使用USB转串口功能时,BSL失效,因此操作前应该先将程序下载至芯片中再调整跳线帽
//调试环境:EW430 V5.30
//作者:www.avrgcc.com
//时间:2014.03.01
********************************************************************/
#include <msp430x14x.h>
#include "Config.h"
//*************************************************************************
// MSP430串口初始化
//*************************************************************************
void UART_Init()
{
U0CTL|=SWRST; //复位SWRST
U0CTL|=CHAR; //8位数据模式
U0TCTL|=SSEL1; //SMCLK为串口时钟
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //N=UBR+(UxMCTL)/8
U0MCTL=0x00; //微调寄存器为0,波特率9600bps
ME1|=UTXE0; //UART0发送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST; //置0
IE1|=URXIE0; //接收中断使能位
P3SEL|= BIT4; //设置IO口为普通I/O模式
P3DIR|= BIT4; //设置IO口方向为输出
P3SEL|= BIT5;
}
//*************************************************************************
// 串口0发送数据函数 //这种方式是可靠的,发送采用查询模式,接收采用中断模式
//*************************************************************************
void Send_Byte(uchar data)
{
while((IFG1&UTXIFG0)==0); //发送寄存器空的时候发送数据
U0TXBUF=data;
}
//*************************************************************************
// 处理来自串口 0 的接收中断 //接收也可以采用中断模式
//*************************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
uchar data=0;
data=U0RXBUF; //接收到的数据存起来
Send_Byte(data); //将接收到的数据再发送出去
}
//*************************************************************************
// 处理来自串口 0 的发送中断,预留
//*************************************************************************
#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
}
//*************************************************************************
// 主函数
//*************************************************************************
void main(void)
{
WDT_Init(); //看门狗设置
Clock_Init(); //系统时钟设置
UART_Init(); //串口设置初始化
_EINT(); //开中断
while(1) //无限循环
{
}
}
7、串口调试助手
文章来源:https://www.toymoban.com/news/detail-616252.html
总结
个人感觉f149和32单片机的使用极为相似,甚至Ctrl+F是查找功能都是与keil5一模一样,f149又是老版本的TI芯片,属于TI的MCUf1x系列,就好比stm32f1x系列的分类,对于大众来说还是比较容易上手的,有幸在我认知范围内可以查找到学习资料,十几个小时的教学视频是开了不同的倍速观看的,加之之前对stm32的理解,短时间可以速成,如果有32单片机的基础建议了解一下。
———————————————————————————————————————————————————————————Verify complete文章来源地址https://www.toymoban.com/news/detail-616252.html
到了这里,关于【速成MSP430f149】电赛期间学习MSP430f149笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!