配置

第一步:右击工程,选择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. spring源码深度解析— IOC 之 bean 的初始化

    一个 bean 经历了 createBeanInstance() 被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步 ...

  2. 利用Python模拟GitHub登录

    最近学习了Fiddler抓包工具的简单使用,通过抓包,我们可以抓取到HTTP请求,并对其进行分析.现在我准备尝试着结合Python来模拟GitHub登录. Fiddler抓包分析 首先,我们想要模拟一 ...

  3. 把 python 程序打包成 egg 或者 whl 安装包

    原文出处:http://www.worldhello.net/2010/12/08/2178.html 本文略有改动 1.1 安装setuptools 首先要安装setuptools工具.Debian ...

  4. Python多进程与多线程编程及GIL详解

    介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程. Python的多进程编程与multiprocess模块 python的多进程编程主要依靠multip ...

  5. something good

    CF292A CF304B CF383A CF409D CF409F CF632A CF652B CF656A CF656B CF656D CF659A CF678A CF697A CF735D CF ...

  6. Excel催化剂开源第44波-窗体在Show模式下受Excel操作影响变为最小化解决方式

    在Excel催化剂的许多功能中,都会开发窗体用于给用户更友好的交互使用,但有一个问题,困扰许久,在窗体上运行某些代码后,中途弹出下MessageBox对话框给用户做一些简单的提示或交互时,发现程序运行 ...

  7. Spring:定时任务定时器 Quartz的使用

    Quartz的使用方式 配置文件方式 一.引入依赖 <!-- spring 其他依赖省略 --> <!-- https://mvnrepository.com/artifact/or ...

  8. APP爬虫(2)把小姐姐的图片down下来

    APP爬虫(1)想学新语言,又没有动力,怎么办? 书接上文.使用appium在帖子列表界面模拟上划动作,捕捉不到列表的规律.上划结束后,列表只能获取到屏幕呈现的部分,而且下标还是从0开始的. 根据酸奶 ...

  9. Java面试题 从源码角度分析HashSet实现原理?

    面试官:请问HashSet有哪些特点? 应聘者:HashSet实现自set接口,set集合中元素无序且不能重复: 面试官:那么HashSet 如何保证元素不重复? 应聘者:因为HashSet底层是基于 ...

  10. 用 | 和 & 简化查询

    利用"|"和"&"简化查询 1.多个字段相同查询条件下用"&"处理 例如该情况: $model = M('Test'); $ ...