配置

第一步:右击工程,选择Options

第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231

第三步:在Debugger里选择FET Debugger:

第四步: 检查FET Debugger里的设置是否正确,这里是Texas Instrument USB-IF采用Automatic方式

这里选择Automatic与Automatic selection,当用串口会自动连接上串口。

第五步:编译程序,下载验证

电赛A题源码

小车代码

/*!
* COPYRIGHT NOTICE
* Copyright (c) 2016,CTGU-GB
* All rights reserved.
*
*
* @file main.c
* @brief MSP430F5529 平台主程序 * @author CTGU-GB
* @version v2.7
* @date 2016-11-26
*/
#include "include.h"
#include "KEY.h" int key1,key2,stop_flag=; int key_flag = ; //定时器中断处理函数
uint16_t Motor1,Motor2;
__interrupt void TIMER_TB0_A0_IRQ_Handler()
{ GPIO_TurnBit (P4, ); } //ADC 中断处理函数
float ad;
uint16_t ADC_MCH1,ADC_MCH2,Motor1,Motor2;
__interrupt void ADC_IRQ_Handler()
{
if(ADC_GetITStatus(ADC_CH2) == TRUE)
{
ad = ADC_ReadChanelValue (ADC_CH2)*3.3/; //读取后会自动清除标志位
ADC_ClearITPendingBit(ADC_CH2);
}
if(ADC_GetITStatus(ADC_CH1) == TRUE)
{
ad = ADC_ReadChanelValue (ADC_CH1)*3.3/; //读取后会自动清除标志位
ADC_ClearITPendingBit(ADC_CH1);
} } uint8_t key_data()
{
static _Bool glag=;
uint8_t key_value=;
if((KEY_isPressed(KEY1)==||KEY_isPressed(KEY2)==)&&glag==)
{
DELAY_MS();
if((KEY_isPressed(KEY1)==||KEY_isPressed(KEY2)==)&&glag==)
{
glag=;
if(KEY_isPressed(KEY1)==) key_value=;
if(KEY_isPressed(KEY2)==) key_value=;
}
}
else if(KEY_isPressed(KEY1)==||KEY_isPressed(KEY2)==) glag=; return key_value;
} void main()
{
uint8_t key_val = ;
uint8_t Data[];
int a,b,c = ;
DisableInterrupts(); //禁止总中断 LED_Init(LED_ALL); //LED灯初始化
KEY_Init(KEY1,NULL);
KEY_Init(KEY2,NULL);
//LED_On (LED1);
OLED_Init(); //Oled初始化
GPIO_Init(P3,,GPI|PULL_UP);
GPIO_Init(P3,,GPI|PULL_UP);
GPIO_Init(P2,,GPI|PULL_UP);
GPIO_Init(P1,,GPI|PULL_UP);
GPIO_Init(P7,,GPI|PULL_UP);
//GPIO_ReadBit(P2,1) == 0 读取按键按下为0 //ADC配置///
ADC_Init(ADC_CH1,ADC_VREF_3_3V,ADC_10bit); //初始化通道,P6.1 // 定时器配置
Set_Vector_Handler(VECTOR_TIMER0_B0,TIMER_TB0_A0_IRQ_Handler); //设置定时器TA1的中断服务程序为:TIMER1_A0_IRQ_Handler TIMER_Interval_Ms(TIMER_B0, ); //设置TA1为定时中断,中断时间为500Ms
TIMER_ITConfig (TIMER_B0, TIMER_CCR0_IRQn, ENABLE); //使能TIMER的某一个中断
///////////////////////////////////////////////////////////////////////////////////////////// // pwm配置
// 定时器PWM输出初始化
TIMER_PWM_MultiChannel_Init(TIMER_A2, , , TIMER_CH1, TIMER_CH2);
//GPIO_ResetBits(PORT2, GPIO_Pin_4|GPIO_Pin_5);
//TIMER_CH1\TIMER_CH2:{P2,4},{P2,5}
//PWM输出占空比设置
//999为满占空比与设置频率无关
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,);
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,);
//////////////////////////////////////////////////////////////////////////////////////////////// /*
///usrt配置////
//配置串口1:TX={P4,4},.RX={P4,5}
UART_Init (UART1,9600); //初始化UART1模块,波特率115200,波特率高时最好把主时钟 设高些
Set_Vector_Handler(VECTOR_UART1,UART_RX_IRQ_Handler); //设置接收中断向量
UART_ITConfig (UART1,UART_RX_IRQn,TRUE); //开串口接收中断
////////////////////////////
*/ EnableInterrupts();
OLED_PrintfAt(FONT_ASCII_6X8,,,"function:");
OLED_PrintfAt(FONT_ASCII_6X8,,,"ADC1:");//显示一个字符
OLED_PrintfAt(FONT_ASCII_6X8,,,"key_count1:");//显示一个字符
OLED_PrintfAt(FONT_ASCII_6X8,,,"key_count2:");//显示一个字符
OLED_PrintfAt(FONT_ASCII_6X8,,,"recvie1:");//显示一个字符
OLED_PrintfAt(FONT_ASCII_6X8,,,"recvie2:");//显示一个字符
OLED_PrintfAt(FONT_ASCII_6X8,,,"Stop_flag:");//显示一个字符
while()
{ /////////////////////要求2//////////////// Data[] = Flash_Read(MAX_SEGMENT,,uint8_t);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",Data[]);
if(Data[] == )
{
while(){
float ad = ADC_ReadChanelOnce (ADC_CH1)*3.3/;
OLED_PrintfAt(FONT_ASCII_6X8,,,"%0.2f",ad);
if(ad<0.5)
{ TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //右
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //左 while()
{ if(KEY_isPressed(KEY2))
{ key_flag =;
break; }
//运行中检测是否在充电标志,中心
if(GPIO_ReadBit(P7,) == )
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",);
stop_flag =;
break;
}
else
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); a=GPIO_ReadBit(P3,); b=GPIO_ReadBit(P3,); ////////// //检测左边是否到达
if(a)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",);
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //左
} ////////// //检测右边是否到达
if(b)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,);
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右 }
if(a == &b == )
{ TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //左
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //右 } }
if(stop_flag == )
{
stop_flag = ;
break; } if(key_flag == )
{
key_flag = ;
break; } }
}
} /////////////////////要求3//////////////////////////////// Data[] = Flash_Read(MAX_SEGMENT,,uint8_t);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",Data[]);
if(Data[] == )
{
while(){
float ad = ADC_ReadChanelOnce (ADC_CH1)*3.3/;
OLED_PrintfAt(FONT_ASCII_6X8,,,"%0.2f",ad);
if(ad<0.5)
{ TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //右
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //左 while()
{ if(KEY_isPressed(KEY2))
{ key_flag =;
break; } //运行中检测是否在充电标志,中心
if(GPIO_ReadBit(P7,) == )
{ OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); }
else
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); a=GPIO_ReadBit(P3,); b=GPIO_ReadBit(P3,); ////////// //检测左边是否到达
if(a)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",);
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //左
} ////////// //检测右边是否到达
if(b)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,);
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右 }
if(a == &b == )
{ TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //左
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //右 } } if(key_flag == )
{
key_flag = ;
break; } }
}
} /////////////////////要求4///////////////////////// Data[] = Flash_Read(MAX_SEGMENT,,uint8_t);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",Data[]);
if(Data[] == )
{
DELAY_MS();
while(){
//float ad = ADC_ReadChanelOnce (ADC_CH1)*3.3/1023;
//OLED_PrintfAt(FONT_ASCII_6X8,2,30,"%0.2f",ad); TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //右
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //左 while()
{ if(KEY_isPressed(KEY2))
{ key_flag =;
break; } //运行中检测是否在充电标志,中心
if(GPIO_ReadBit(P7,) == )
{ OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); }
else
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); a=GPIO_ReadBit(P3,); b=GPIO_ReadBit(P3,); ////////// //检测左边是否到达
if(a)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",);
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //左
} ////////// //检测右边是否到达
if(b)
{
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,);
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右
}
else{
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",); //右 }
if(a == &b == )
{ TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH1,); //左
TIMER_PWM_SetChannelDuty(TIMER_A2,TIMER_CH2,); //右 } } if(key_flag == )
{
key_flag = ;
break; } }
} ///////////////////////////设置////////////////////
//key1-p2.1
//key2-p1.1 //p2.1设置,p1.1确定
while()
{
for(int i=;i<;i++)
{
Data[i] = Flash_Read(MAX_SEGMENT,i,uint8_t);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",Data[i]);
}
key_val = key_data();
if(key_val)
{
if(key_val == )
{
key2 ++;
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",key2);
}
else
{
//赋值
Data[]=key2; //先清除flash,再存
Flash_Erase_Segment(MAX_SEGMENT);
Flash_Write_buf (MAX_SEGMENT,,,Data); //数据清零
Data[]=; key1 ++;
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",key1);
//再读取
for(int i=;i<;i++)
{
Data[i] = Flash_Read(MAX_SEGMENT,i,uint8_t);
OLED_PrintfAt(FONT_ASCII_6X8,,,"%d",Data[i]); }
if(Data[] !=) break; }
}
else
{ //sOLED_PrintfAt(FONT_ASCII_6X8,3,70,"%d",0);
} }
///////////////////////////////////////////////////////////// }
}

底板控制

/*!
* COPYRIGHT NOTICE
* Copyright (c) 2016,CTGU-GB
* All rights reserved.
*
*
* @file main.c
* @brief MSP430F5529 平台主程序 * @author CTGU-GB
* @version v2.7
* @date 2016-11-26
*/
#include "include.h" //定时器中断处理函数
uint16_t Motor1,Motor2;
__interrupt void TIMER_TB0_A0_IRQ_Handler()
{ //GPIO_TurnBit (P4, 7); } void main()
{ int Kal = ;
DisableInterrupts(); //禁止总中断 LED_Init(LED_ALL); //LED灯初始化
OLED_Init(); //Oled初始化
LED_Off(LED1);
LED_Off(LED2);
GPIO_Init(P6,,GPI|PULL_UP);
GPIO_Init(P6,,GPI|PULL_UP);
GPIO_Init(P6,,GPI|PULL_UP);
GPIO_Init(P6,,GPI|PULL_UP); GPIO_Init(P1,,GPI|PULL_UP);
GPIO_Init(P1,,GPI|PULL_UP);
GPIO_Init(P1,,GPI|PULL_UP);
GPIO_Init(P1,,GPI|PULL_UP); // 定时器配置
Set_Vector_Handler(VECTOR_TIMER0_B0,TIMER_TB0_A0_IRQ_Handler); //设置定时器TA1的中断服务程序为:TIMER1_A0_IRQ_Handler
TIMER_Interval_Ms(TIMER_B0, ); //设置TA1为定时中断,中断时间为500Ms
TIMER_ITConfig (TIMER_B0, TIMER_CCR0_IRQn, ENABLE); //使能TIMER的某一个中断
/////////////////////////////////////////////////////////////////////////////////////////////
GPIO_ResetBits(PORT6, GPIO_Pin_1 |GPIO_Pin_2|GPIO_Pin_3); EnableInterrupts(); while()
{ /*
//开发射圈1
GPIO_SetBits(PORT6, GPIO_Pin_0);
//关其他发射圈
GPIO_ResetBits(PORT6, GPIO_Pin_1 |GPIO_Pin_2|GPIO_Pin_3);
while(1)
{ while(GPIO_ReadBit(P1,2) ==1)
{ }
LED_Off(LED1);
while(GPIO_ReadBit(P1,2) ==0) { }
LED_On(LED1);
while(GPIO_ReadBit(P1,2) ==1) { }
LED_Off(LED1);
GPIO_SetBits(PORT6, GPIO_Pin_0);
break; }
*/ while()
{ if(GPIO_ReadBit(P1,) == )
{ LED_On(LED1);
//开发射圈1
GPIO_SetBits(PORT6, GPIO_Pin_1);
//关其他发射圈
GPIO_ResetBits(PORT6, GPIO_Pin_2 |GPIO_Pin_3); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED1);
while(GPIO_ReadBit(P1,) ==) { }
LED_On(LED2); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED2);
GPIO_ResetBits(PORT6, GPIO_Pin_1);
} else if(GPIO_ReadBit(P1,) == )
{
LED_On(LED1);
//开发射圈1
GPIO_SetBits(PORT6, GPIO_Pin_2);
//关其他发射圈
GPIO_ResetBits(PORT6, GPIO_Pin_1 |GPIO_Pin_3); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED1);
while(GPIO_ReadBit(P1,) ==) { }
LED_On(LED2); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED2);
GPIO_ResetBits(PORT6, GPIO_Pin_2);
} else if(GPIO_ReadBit(P1,) == )
{
LED_On(LED1);
//开发射圈1
GPIO_SetBits(PORT6, GPIO_Pin_3);
//关其他发射圈
GPIO_ResetBits(PORT6, GPIO_Pin_1 |GPIO_Pin_2); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED1);
while(GPIO_ReadBit(P1,) ==) { }
LED_On(LED2); while(GPIO_ReadBit(P1,) ==)
{ }
LED_Off(LED2);
GPIO_ResetBits(PORT6, GPIO_Pin_3);
} //GPIO_SetBits (PORT1, GPIO_Pin_0|GPIO_Pin_1); //P1.0,P1.1输出高电平
//GPIO_SetBits() ; //////////////////延时////////////////////
//DELAY_MS(500); }
}
}

8.15号后会对代码思路及硬件做个记录。这几天会稍微休息一会。

TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)的更多相关文章

  1. ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval

    ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询 ...

  2. 模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】

    请查看我的有道云笔记: 文档:电磁曲射炮分析.note链接:http://note.youdao.com/noteshare?id=26f6b6febc04a8983d5efce925e92e21

  3. [2019南京网络赛D题]Robots

    题目链接 2019.9.2更新 第二天睡醒想了想发现好像搜一遍就可以过,赛时写的花里胡哨的还错了,太菜了QAQ #include<bits/stdc++.h> using namespac ...

  4. 2019建模美赛B题(派送无人机)M奖论文

    昨天上午出了建模美赛的结果,我们小组获得的是M奖,感觉挺开心的.我一直觉得拿O奖那种是个概率事件,需要天时地利人和的各种因素都合适才行,所以看到自己是M奖,感觉自己的能力已经得到了认可就很满意了.今天 ...

  5. Comet OJ - 2019国庆欢乐赛 C题 两排房子

    ###题目链接### 题目大意:这里有横着的两排房子,给你每个房子的左端点和右端点.若两排房子中分别有两个房子 x y ,他们在横坐标上有重叠部分(端点重叠也算),则被称为 “对门” 关系. 问你总共 ...

  6. ACM-ICPC 2019南昌网络赛F题 Megumi With String

    ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...

  7. 2019上海网络赛B题(差分 + 离散化 or 差分 + 思维)

    这题.....队里都没怎么训练差分,导致败北...写了一堆线段树嘤嘤嘤,到最后也是超时,比赛结束后看到了差分的思想于是就去学了一手. 其实了解差分思想的一眼就能看出来是差分了.但是如果对n差分的话很明 ...

  8. [2019上海网络赛F题]Rhyme scheme

    题目链接 题意,求出合法的长度为n的字典序第k小字符串,合法的定义为除了最后一位,每一位的取值范围为'A'到'A'+pos-1,而最后一位的取值范围'A'到当前字符串最大值+1. 队友tql,Orz ...

  9. [2019上海网络赛J题]Stone game

    题目链接 CSLnb! 题意是求出给定集合中有多少个合法子集,合法子集的定义为,子集和>=总和-子集和$\& \&$子集和-(子集的子集和)<=总和-子集和. 其实就是很简 ...

随机推荐

  1. 数据结构与算法---树结构(Tree structure)

    为什么需要树这种数据结构 数组存储方式的分析 优点:通过下标方式访问元素,速度快.对于有序数组,还可使用二分查找提高检索速度. 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 ...

  2. Codeforces Gym101257F:Islands II(求割点+思维)

    http://codeforces.com/gym/101257/problem/F 题意:给出一个n*m的地图,上面相同数字的代表一个国家,问对于每个国家有多少个国家在它内部(即被包围).例如第一个 ...

  3. 存储账户静态网站与Azure CDN

    背景 把静态网站或文件托管在对象存储上,有很多可能很多好处,比如说:可以节省成本,因为相对虚机更便宜:性能更优,因为可以依赖于对象存储本身的高吞吐以及 CDN 的:更好的高可用性,因为也可以依赖于对象 ...

  4. echo-nginx-module的安装、配置、使用

    一.下载压缩包 [root@www nginx-1.16.0]# wget https://github.com/openresty/echo-nginx-module/archive/v0.61.t ...

  5. 4.秋招复习简单整理之java支持多继承吗?

    java仅支持单继承,但支持接口多实现.

  6. 每周一个js重要概念之一 调用堆栈

    js写了也有两年多了,大到复杂的后台系统,小到页面,还有日均300万的网页主站,HTML5的适配页面等等. 框架也杂七杂八接触了不少,从小的jquery.bootstrap.echarts等等,到大一 ...

  7. 20131201-插件-XML-第十二天(未完)

    以后再写代码的时候,先从中间层|接口|协议开始入手. 在写XML时注意的事情: 在EditPlus中,Tab是缩进 在头文件中的编码格式是"utf-8"是,在Editplus中保存 ...

  8. MyBatis从入门到精通:使用XML方式(映射文件之类的)

    2.3节笔记部分: package tk.mybatis.simple; public class Temp { } /* 2.2 使用XML方式 MyBatis使用了Java的动态代理可以直接通过接 ...

  9. Shiro authentication for Apache Zeppelin

    Overview Apache Shiro is a powerful and easy-to-use Java security framework that performs authentica ...

  10. python爬虫笔记之爬取足球比赛赛程

    目标:爬取某网站比赛赛程,动态网页,则需找到对应ajax请求(具体可参考:https://blog.csdn.net/you_are_my_dream/article/details/53399949 ...