【速成MSP430f149】电赛期间学习MSP430f149笔记

这篇具有很好参考价值的文章主要介绍了【速成MSP430f149】电赛期间学习MSP430f149笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

由于本人加入实验室较晚,起步较迟,目前接触单片机不到10个月,接触过arduino,stc15单片机,熟悉51单片机,STM32单片机,由于上届省电赛采用TI芯片,然后大胆的推测这次不会用TI的MCU,可往往天意弄人,这次承继了上次国赛的两个小车通信要求,但是可以不加视觉,难度均衡国赛,本人想在此短时间速成MSP430f149的使用,完成赛题。今天是江苏省级电赛的第一天。

一、编译、烧录软件

msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
第一个是我购买的淘宝Studing店铺给的芯片资料,其他是b站上热门视频附带的资料,第一个里面我下载了烧录软件

———————————————————————————————————这里做个勘误,我觉得第一个文件夹里面的不太好用,建议用后三个
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

  • 编译平台 IAR(推荐IAR EW430 5.3版本) 管理员打开下载包可以防止之后因为权限原因编译不成功
  • ★★★下载需要是.txt文件,在Debug------>Exe 文件夹下面 ★★★

二、宁波欣创f149

1、观看的视频是宁波欣创电子科技的视频资料
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
外部供电和引脚供电不要同时使用,否则会对芯片造成不可估量的损失

2、芯片引脚电路图
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
3、资料官网
TI:https://www.ti.com.cn/product/zh-cn/MSP430F149?keyMatch=MSP430F149&tisearch=search-everything&usecase=GPN
欣创:www.avrgcc.com 技术交流栏目
4、建立工程
(1)新建工程
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
(2)保存为英文路径,不然编译容易出错
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
(3)保存对话框
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
关于一些 IAR 工程的配置和基础使用,视频里面有,这里就不提了

三、点亮LED灯

1、关于Options里的一些配置记录
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

  • 当选择软件仿真器的时候,其他都无所谓的
  • .h的头文件调用直接放到主函数main.c的路径下,直接编译
  • 另外用第三方的软件下载,BSL,不是IAR,所有要输出txt文件
    这个是BSL下载器的文件夹,推荐使用MspFet下载(管理员身份打开)
    msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

四、仿真器

由于时间紧、任务重,这里暂时先跳过仿真器不看,如果后面有需要再看

五、时钟系统、LED控制

1、区别于MSP430f169:

  • f169比f149多一些片内设备,比如说f169有ADC、DAC、I2C,而f149只有ADC,其他基本是一样的。
  • 外形一样
    msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
    小圆点左下为1脚,逆时针,如果接反,长时间上电,烧掉的可能性就非常大

2、有内部时钟,可以不接晶振,接上电源就可以工作
3、48个IO口,P1.0-1.7、P2.0-2.7、…、P6.0-6.7
4、这里讲到复用功能,让我联想到了stm32的复用功能,查找百度得到更好的理解
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
5、时钟周期要进入一个稳定周期(在代码里表现)
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
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端口

msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
设置输入、输出或者模式或者引脚第二功能
& 是输入 , | 是输出
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
用于中断操作的三个寄存器
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

/********************************************************************
//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、
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
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);
}

八、看门狗

msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

  • 个人理解看门狗就是一个定时复位的程序,到了周期自动复位,如果执行喂狗操作(清除定时器),看门狗不作用(结合51单片机自己大致想了一下,前面寄存器和电路没看,后面我开2倍速,如果有误愿请告知)
  • 另外,看门狗还可以作为定时器使用

九、USART串行通信模块(UART)

1、串行:一根线传输数据
并行:八根线传输数据
2、同步:时钟一样,低速传输,如:spi
异步:时钟可以不同,低速传输
3、
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

  • P3.4、P3.5、P3.6、P3.7
  • ttl通信:RX—TX,TX—RX 可以实现单片机与单片机之间的通信
  • usb转ttl:可以实现电脑和单片机之间的通信
    这是 IO口第二功能,需要复用
    4、寄存器
    msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
    msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
5、计算波特率
(1)
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
(2)
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言
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、串口调试助手
msp430f149,# MSP430,学习,单片机,编辑器,mcu,c语言

总结

个人感觉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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)

    ​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。 ​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,

    2024年02月16日
    浏览(49)
  • MSP430F5529单片机入门学习笔记1

    本笔记整理自B站教程 MSP430F5529单片机学习视频汇总 右边部分写错了,看的时候注意 注意#include“driverlib.h”头文件时要注意: 添加MSP430F5xx_6xx文件夹到当前工程下 MSP430F5xx_6xx文件夹是在导入的msp430ware_3_80_13_03包中找 把上述MSP430F5xx_6xx文件夹的路径包含进来 有三个系统时钟可

    2024年02月06日
    浏览(47)
  • 【2023电赛备赛】msp430f5529学习笔记(一)

    【写在前】 本人目前是大二在读生,第一次参加电赛,准备不充分,结果熬了四天,最后成绩却不如人意。有51和32的基础,然后想立一个flag系统的学习一下主打超低功耗的msp430f5529单片机为比赛做准备(毕竟电赛限制TI的板子)。另一方面也是给电协的后继者留下一些参考的

    2024年02月11日
    浏览(48)
  • MSP430F5529 DriverLib 库函数学习笔记(一)时钟配置和闪烁LED

    平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) (1)5个时钟来源         时钟系统模块具有5个时钟来源。 ① XT1CLK :低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK :内部超低功耗低频振荡

    2024年02月16日
    浏览(52)
  • MSP430F5529库函数学习——串口

    波特率计算网站;导入MSP430Ware,查看例程;原理图和中文开发手册获取 目录 GPIO_setAsPeripheralModuleFunctionInputPin()和GPIO_setAsPeripheralModuleFunctionOutputPin 函数声明  作用 参数 selectedPort selectedPins 使用 USCI_A_UART_init() 函数声明  作用 参数 baseAddress param  USCI_A_UART_enable() 函数

    2024年02月16日
    浏览(68)
  • MSP430F5529库函数GPIO学习

    导入MSP430Ware,查看例程;数据手册以及原理图获取 建议不是很了解寄存器的看完我的MSP430F5529学习笔记  目录 GPIO_setAsOutputPin() 函数声明 作用 参数 selectedPort selectedPins 修改的寄存器 使用 与GPIO_setAsOutputPin()参数一致的函数  GPIO_setOutputHighOnPin() GPIO_setOutputLowOnPin()

    2024年02月15日
    浏览(68)
  • 【MSP430F5529基于库函数的学习】电赛速学及小车实战

    为电赛准备学习的MSP430笔记 提示:主要跟着这个大佬学的 一张经常要看的图 时钟配置和闪烁的LED 时钟系统结构 (1)5个时钟来源 时钟系统模块具有5个时钟来源。 ① XT1CLK:低频/高频振荡器,可以使用32768Hz的手表晶振、标准晶体、谐振器或4~32MHz的外部时钟源; ② VLOCLK:

    2024年02月12日
    浏览(46)
  • MSP430F5529——中断理解

    认识低功耗模式; MSP430的中断,需要两个部分,一部分是打开中断,另外一部分是编写中断服务函数 首先我们得知道__bis_SR_register和_BIS_SR是一个玩意。查看宏定义可知  _BIS_SR()可传入的参数 然后我们查看x的值,发现里面有八个可以传入的值 我们这里只需要关系GIE就可以

    2024年02月16日
    浏览(55)
  • 05:OLED模块【MSP430F5529】

    目录 实物图 字模取字         字模软件         取模步骤         1.设置软件         2.取模         3.输出数据  代码 type.h oledfont.h oled.h oled.c main.c 下面图片中,可以看到OLED模块的四个接口:GND,VCC,SCL,SDA GND VCC SCL SDA 接地 接电源3.3V/5V 接P3.5 接P3.6       

    2024年02月16日
    浏览(47)
  • 零基础学习MSP430F552LP开发板,学习前期准备,Code Composer Studio(CCS)软件的安装

    零基础学习MSP430F552LP开发板 一、前言 零基础学习MSP430F552LP开发板,为电子设计竞赛做准备以及学好这一款芯片。 在选择比赛题目时,发现有的题目时规定使用ti的芯片作为控制MCU。这时我们就必要学会使用MSP430类的芯片了,这里开始学习的是MSP430F5529LP。样品如下图: 二、

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包