MSP430F5529单片机入门学习笔记1

news2024/11/26 5:23:36

本笔记整理自B站教程MSP430F5529单片机学习视频汇总

基于库函数的开发—GPIO库函数

右边部分写错了,看的时候注意

基于库函数的开发—GPIO实践操作

LED交替闪烁

#include <msp430.h>
/*
 * EXP-GPIO-01.C
 *
 *  Created on: 2023年3月10日
 *      Author: ASUS
 */

#include "driverlib.h"

void main(void)
{
    //关闭看门狗
    WDT_A_hold(WDT_A_BASE);

    //设置P1.0为输出(LED1)
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);

    //设置P4.7为输出(LED2)
    GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN7);

    //设置P1.0输出高电平(LED1点亮)
    GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN0);

    //设置P4.7输出低电平(LED2熄灭)
    GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN7);

    while(1)
    {
        //取反P4.7引脚的输出
        GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN7);

        //取反P1.0引脚的输出
        GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);

        //软件延迟
        __delay_cycles(1000000);

    }
}

注意#include“driverlib.h”头文件时要注意:

  • 添加MSP430F5xx_6xx文件夹到当前工程下

MSP430F5xx_6xx文件夹是在导入的msp430ware_3_80_13_03包中找

  • 把上述MSP430F5xx_6xx文件夹的路径包含进来

按键控制LED

#include <msp430.h>
/*
 * EXP-GPIO-02.C
 *
 *  Created on: 2023年3月10日
 *      Author: ASUS
 */

#include "driverlib.h"

void main(void)
{
    //关闭看门狗
    WDT_A_hold(WDT_A_BASE);

    //设置P1.0为输出(LED1)
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);

    //设置P4.7为输出(LED2)
    GPIO_setAsOutputPin(GPIO_PORT_P4, GPIO_PIN7);

    //设置P1.0输出低电平(LED1熄灭)
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);

    //设置P4.7输出低电平(LED2熄灭)
    GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN7);

    //设置P2.1为输入,上拉(S1)
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P2, GPIO_PIN1);

    //设置P1.1为输入,上拉(S2)
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);

    while(1)
    {
        //没有按键按下时,为高电平;按键按下时为低电平
        if((GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1)) ||
          (GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1))
              )
        {
            //软件延时,相当于是按键消抖
            __delay_cycles(5000);

            if(GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1))
            {
                //等待按键释放
                while(GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P2, GPIO_PIN1));

                //改变LED1的状态,(取反P1.0引脚的输出)
                GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
            }

            if(GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1))
            {
                //等待按键释放
                while(GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1));

                //改变LED1的状态,(取反P4.7引脚的输出)
                GPIO_toggleOutputOnPin(GPIO_PORT_P4, GPIO_PIN7);
            }

        }
        //软件延时
        __delay_cycles(5000);
    }

}

单个LED闪烁

#include <msp430.h>
/*
 * EXAMPLE007.C
 *
 *  Created on: 2023年3月10日
 *      Author: ASUS
 */

/**
 * main.c
 */

void main(void)
{
    unsigned i, j;

    WDTCTL = WDTPW | WDTHOLD;   //stop watchdog timer关闭看门狗

    P4DIR |= BIT7;  //p4.7方向设置为输出

    P4OUT |= BIT7;  //p4.7输出高电平,点亮LED

    P4OUT &= ~BIT7; //p4.7输出低电平,熄灭LED

    while(1)
    {
        P4OUT |= BIT7;  //p4.7输出高电平,点亮LED
        for(i = 60000; i > 0; i --)
        {
            for(j = 200; j > 0; j --)   //延时
            {
                ;
            }
        }

        P4OUT &= ~BIT7; //p4.7输出低电平,熄灭LED
        for(i = 60000; i > 0; i --)
        {
            for(j = 200; j > 0; j --)   //延时
            {
                ;
            }
        }

    }


}

时钟系统(UCS:Unified Clock System)

有三个系统时钟可以选择ACLK、SMCLK、MCLK

VLOCLK、DCOCLK、DCOCLKDIV、REFOCLK是内部时钟源

VLOCLK受温度变化影响较大;DCOCLK、DCOCLKDIV稳定度稍微高一点;REFOCLK稳定度更高,是经过内部修整之后的

上电之后MCLK、SMCLK时钟信号默认来自DCOCLKDIV时钟源,这是DCOCLK经过2分频得到的,ACLK主要来自XT1CLK

MCLK时钟信号默认来自DCOCLKDIV时钟源,这题的表述可能不是很准确

时钟源如果来自LFXT1低频晶振,当低频晶振发生故障,不工作,系统会自动切换到REFOCLK(32768),场景2也同理,这是系统的防护机制

TimerA定时器基本功能

LED1通过定时器控制不断闪烁

/*
 * TimerA.C
 *
 *  Created on: 2023年3月11日
 *      Author: ASUS
 */

#include <msp430.h>

int main(void)
{
    //关闭看门狗
    WDTCTL = WDTPW + WDTHOLD;

    //引脚设置为输出
    P1DIR |= 0x01;

    //使能CCR0中断
    TA0CCTL0 = CCIE;

    //设置计数值
    TA0CCR0 = 50000;

    //选择时钟源,选择工作模式
    TA0CTL = TASSEL_2 + MC_1 + TACLR;

    //进入LPM0,开启全局中断
    __bis_SR_register(LPM0_bits + GIE);

    __no_operation();

}

//Timer0 A0中断服务函数
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
    //引脚P1.0的输出取反
    P1OUT ^= 0x01;
}

TimerA工作模式和中断

定时器控制红色LED闪烁

具体要求

解题思路

请思考,用软件延时的方式,有利弊?

代码示例

#include <msp430.h>
/*
 * TimerA_LED.C
 * 代码示例1:采用溢出中断的方式
 *  Created on: 2023年3月11日
 *      Author: ASUS
 */

int main(void)
{
    //停用看门狗
    WDTCTL = WDTPW + WDTHOLD;

    //P1.0设置为输出
    P1DIR |= BIT0;

    //设置开始计数值;16384 / 32768 = 0.5s,65535-16384
    TA0R = 65535 - 16384;

    //选择ACLK,连续计数模式,不要清除TAR
    TA0CTL = TASSEL__ACLK + MC_2 + TAIE;

    //开启中断
    _EINT();

    while(1)
    {
        __no_operation();   //调试用
    }
}

//Timer0 A1中断服务函数
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
    switch(__even_in_range(TA0IV, 14))
    {
        case 0:     //无中断
            break;
        case 2:     //CCR1中断
            break;
        case 4:     //CCR2中断
            break;
        case 6:     //CCR3中断
            break;
        case 8:     //CCR4中断
            break;
        case 10:    //CCR5中断
            break;
        case 12:    //CCR6中断
            break;
        //溢出中断
        case 14:
            TA0R = 65535 - 16384;
            P1OUT ^= BIT0;
            break;
        default:
            break;
    }
}

#include <msp430.h>
/*
 * TimerA_LED2.C
 *
 *  Created on: 2023年3月11日
 *      Author: ASUS
 */

unsigned char u8_count_10ms;

int main(void)
{
    //停用看门狗
    WDTCTL = WDTPW + WDTHOLD;

    //P1.0设置为输出
    P1DIR |= BIT0;

    //使能CCR0中断
    TA0CCTL0 = CCIE;

    //设置目标计数值
    TA0CCR0 = 10000;        //10ms

    //选择SMCLK,增计数模式,清除TAR
    TA0CTL = TASSEL__SMCLK + MC_1 + TACLR;

    u8_count_10ms = 0;

    //开启中断
    _EINT();

    while(1)
    {
        __no_operation();
    }
}

//Timer0 A0中断服务函数
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
    u8_count_10ms ++;

    if(u8_count_10ms >= 50)
    {
        P1OUT ^= BIT0;          //P1.0的输出取反
        u8_count_10ms = 0;

    }
}

#include <msp430.h>
/*
 * TimerA_LED3.C
 *
 *  Created on: 2023年3月11日
 *      Author: ASUS
 */

int main(void)
{
    //停用看门狗
    WDTCTL = WDTPW + WDTHOLD;

    //P1.0设置为输出
    P1DIR |= BIT0;

    //使能CCR0中断
    TA0CCTL0 = CCIE;

    //设置目标计数值
    TA0CCR0 = 50000;                                        //500ms

    //选择SMCLK,增计数模式,清除TAR
    TA0CTL = TASSEL__SMCLK + ID__2 + MC_1 + TACLR;          //ID__2表示2分频
    TA0EX0 = TAIDEX_5;                                      //TAIDEX_5表示5分频,加起来10分频

    //开启中断
    _EINT();
    while(1)
    {
        __no_operation();
    }
}

//Timer0 A0中断服务函数
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)                        //每500ms进一次中断
{
    //P1.0的输出取反
    P1OUT ^= BIT0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/403144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

webRtc概念

webRtc概念 以下的文档整理来自此链接 文档整理了一系列实现web通用接口的ECMAScript APIs &#xff0c;这些接口是为了支持浏览器或者一些其他实现了实时交换协议的设备进行媒体信息和程序数据交换。 1、实现点对点通信的规范&#xff1a; NAT穿透实现与远端节点链接比如&a…

WebRTC开源库内部调用abort函数引发程序发生闪退问题的排查

目录 1、初始问题描述 2、使用Process Explorer工具查看到处理音视频业务的rtcmpdll.dll模块没有加载起来 3、使用Dependency Walker工具查看到rtcmpdll.dll依赖的库有问题 4、更新库之后Debug程序启动时就发生异常&#xff0c;程序闪退 5、VS调试时看不到有效的函数调用堆…

hashmap存储方式 hash碰撞及其解决方式

1.Map的存储特点 在Map这个结构中&#xff0c;数据是以键值对&#xff08;key-value&#xff09;的形式进行存储的&#xff0c;每一个存储进map的数据都是一一对应的。 创建一个Map结构可以使用new HashMap()以及new TreeMap()两种方式&#xff0c;两者之间的区别是&#xff1a…

TVS和稳压管的相同点和不同点

大家好,我是记得诚。 文章目录 介绍相同点不同点介绍 TVS和稳压管都是电路中很常用的电子元器件,都是二极管的一个种类。 TVS二极管全称是Transient voltage suppression diode,也叫瞬态电压抑制二极管。 稳压二极管英文名字Zener diode,又叫齐纳二极管。 关于稳压二极…

Jenkins从下载到部署项目的流程

Jenkins安装配置1.1 Jenkins介绍Jenkins 是一款流行的开源持续集成&#xff08;Continuous Integration&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;具有自动化构建、测试和部署等功能。官网&#xff1a; http://jenkins-ci.org/。Jenkins的特征&#xff1a;开源…

谷粒学院开发(三):统一日志、异常及前端准备工作

特定异常处理 ControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class) // 指定出现什么异常会被处理ResponseBody // 为了能够返回数据public R error(Exception e) {e.printStackTrace();return R.error().message("执行了全局异常…

Linux--磁盘存储管理 分区工具 fdisk 分区实操 详解~

上一篇文章介绍了 fdisk 的各个菜单功能&#xff0c;这篇&#xff0c;我们直接实操 管理磁盘 fdisk :分区 &#xff1a; 我们上一篇文章里讲过&#xff0c;上篇文章的 磁盘 /dev/nvme0n1 空间已经满了因此 &#xff0c; 又重新添加了一块儿硬盘~&#xff01;&#xff01;>&g…

传统图像处理之颜色特征

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

UML时序图速查——架构设计必备技能

目录 一、时序图概述 二、时序图元素 1. Actor&#xff08;角色&#xff09;& Object&#xff08;对象&#xff09; 2. Lifeline&#xff08;生命线&#xff09; 3. Message&#xff08;消息&#xff09; 4. Combined Fragment&#xff08;组合片段&#xff09; 5. …

【Linux】多线程---线程控制

进程在前面已经讲过了&#xff0c;所以这次我们来讨论一下多线程。前言&#xff1a;线程的背景进程是Linux中资源及事物管理的基本单位&#xff0c;是系统进行资源分配和调度的一个独立单位。但是实现进程间通信需要借助操作系统中专门的通信机制&#xff0c;但是只这些机制将占…

java并发入门(一)共享模型—Synchronized、Wait/Notify、pack/unpack

一、共享模型—管程 1、共享存在的问题 1.1 共享变量案例 package com.yyds.juc.monitor;import lombok.extern.slf4j.Slf4j;Slf4j(topic "c.MTest1") public class MTest1 {static int counter 0;public static void main(String[] args) throws InterruptedEx…

如何科学管理技术团队的研发交付速率?

每当提及「研发效能」&#xff0c;我们都在谈论什么&#xff1f; 研发效能管理要在保证质量的前提下&#xff0c;思考如何更快地向客户交付价值。在管理实践中&#xff0c;效能度量涉及三大维度&#xff1a;交付速率、交付质量、交付价值。 技术团队对内如何优化开发流程&…

STM32实战项目-基本定时器

前言&#xff1a; 通过基本定时器TIM6&#xff0c;让三个LED灯每间隔1s闪烁一次。 目录 1.基本定时器参数配置 1.1框图分析 1.2参数配置 2.软件程序 2.1整体框架 2.2定时器结构体 2.3定时器回调函数 1.基本定时器参数配置 1.1框图分析 TIM6作为基本定时器 它是挂载…

【Linux】-- 线程池

目录 铺垫 内存 线程的角度 线程池 基本代码结构 对于线程池的生产消费的完善 初步实现线程池生产消费 结合日志完善线程池 铺垫 内存 &#xff08;以STL处理方式&#xff0c;引入提供效率的一种思想&#xff09; 通过进行C语言与C语言的学习中&#xff0c;平时我们使…

C语言 深度剖析数据在内存中的存储(2)

本次博客是继上次博客&#xff0c;继续向下剖析数据在内存当中的存储。练习浮点型在内存中的存储练习代码1&#xff1a;int main() {char a -1;signed char b-1;unsigned char c-1;printf("a%d,b%d,c%d",a,b,c);return 0; }1.在本题中首先我们要知道的是%d打印的是有…

【数据结构之树】——什么是树,树的特点,树的相关概念和表示方法以及在实际的应用。

文章目录一、1.树是什么&#xff1f;2.树的特点二、树的相关概念三、树的表示方法1.常规方法表示树2.使用左孩子右兄弟表示法3. 使用顺序表来存储父亲节点的下标三、树在实际的应用总结一、1.树是什么&#xff1f; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n&…

MatCap模拟光照效果实现

大家好&#xff0c;我是阿赵 之前介绍过各种光照模型的实现方法。那些光照模型的实现虽然有算法上的不同&#xff0c;但基本上都是灯光方向和法线方向的计算得出的明暗结果。 下面介绍一种叫做MatCap的模拟光照效果&#xff0c;这种方式计算非常简单&#xff0c;脱离灯光的计算…

javaWeb核心05-FilterListenerAjax(Axios)json

文章目录Filter&Listener&Ajax1&#xff0c;Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.2.2 代码演示1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示1.5.3 问题1.6 案例1.6.1 需求1.6.2 分析1.6.3 代码实现1.6.3.1 创建F…

Linux 安装 nginx 详细教程

文章目录Linux 安装 nginx 详细步骤①安装依赖包②下载并解压安装包③安装 nginx④启动 nginx 服务⑤配置 nginx.conf提示&#xff1a;以下是本篇文章正文内容&#xff0c;Linux 系列学习将会持续更新 Linux 安装 nginx 详细步骤 ①安装依赖包 下载模块依赖性 Nginx 需要依赖…

resp无法连接Redis服务的解决方法

在保证Windows主机和Linux虚拟机能够相互ping通的前提下&#xff0c;resp仍无法连接到Linux上的redis服务&#xff0c;那么需要考虑以下原因&#xff1a; Linux防火墙问题&#xff0c;Linux未关闭防火墙&#xff0c;或防火墙未放通6379/tcp端口&#xff1b;redis配置问题&#…