大家好、
我有一个项目、除其他读数/决定外、我需要:
-发送击键
-通过 Serial 向 GUI 报告数据
我有这两段代码、来自代码示例、它们是单独工作的、但当我将它们放在一起时不工作。 我想知道它是否完全不兼容(对于某些冲突/共享硬件资源):
代码1)来自 MSP430USB 开发程序 Package_5_20_06_03 > exmaple H8
#include
#include "driverlib.h"
#include "usb_config/descriptors.h"
#include "USB_API/USB_Common/device.h"
#include "USB_API/USB_Common/usb.h"//特定于 USB 的函数
#include "USB_API/USB_HID_API/usbhid.h"
#include "usb_app/keyboard.h"
/*
*注意:修改 hal.h 以选择特定的评估板并进行定制
*您自己的电路板。
*
#include "hal.h"
#include
//#include
#include
/*** 特定于应用的全局变量 /
volatile uint8_t button1 Pressed = false;
volatile uint8_t button2 Pressed = false;
volatile uint8_t keySendComplete = true;
uint8_t button1Buf[128]="ABC";
uint8_t button1StringLength;
void main (void)
//uint8_t i;
//WDT_A_HOLD (WDT_A_base);//停止看门狗计时器
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
// USB API 所需的最小 Vcore 设置为 PMM_CORE_LEVEL_2。
PMM_setVCore (PMM_CORE_LEVEL_2);
USBHAL_initPorts ();//配置用于低功耗(输出低电平)的 GPIO
USBHAL_initClocks (8000000);//配置时钟。 MCLK=SMCLK=FLL=8MHz;ACLK=REFO =32kHz
USBHAL_initButtons();// Init 两个按钮
keyboard_init();// Init 键盘报告
USB_setup (true、true);// Init USB & events;如果存在主机,则连接
_bis_SR_register (LPM0_bits + GIE);
__ENABLE_INTERRUPT ();//启用全局中断
while (1)
{
开关(USB_getConnectionState())
{
//在上枚举您的设备时执行此例
// USB 主机
实例 ST_ENUM_ACTIVE:
//使用中断输入 LPM0,直至按键
//_bis_SR_register (LPM0_bits + GIE);
/********* HID 键盘部分******** /
if (button1 Presed){
keyboard_press (button1Buf[0]);
while (!keySendComplete);
KeySendComplete =错误;
keyboard_release (button1Buf[0]);
keyboard_releaseAll();
while (!keySendComplete);
KeySendComplete =错误;
keyboard_press (button1Buf[1]);
while (!keySendComplete);
KeySendComplete =错误;
keyboard_release (button1Buf[1]);
while (!keySendComplete);
KeySendComplete =错误;
button1 Pressed = false;
button2 Pressed = false;
/*
button1StringLength = strlen ((const char *) button1Buf);
if (button2Presed){
keyboard_press (key_left_shift);
while (!keySendComplete);
KeySendComplete =错误;
}
(i=0;<button1StringLength; i++) {
keyboard_press (button1Buf[i]);
while (!keySendComplete);
KeySendComplete =错误;
keyboard_release (button1Buf[i]);
while (!keySendComplete);
KeySendComplete =错误;
}
keyboard_release (key_left_shift);
while (!keySendComplete);
KeySendComplete =错误;
button1 Pressed = false;
button2 Pressed = false;
*
}
中断;
//这些情况在设备断开连接时执行
//主机(意思是,未枚举);已枚举但已暂停
//由主机连接,或连接到没有 USB 主机的有源集线器
//存在。
案例 ST_PHYS_DISCONNECTED:
实例 ST_ENUM_Suspended:
案例 ST_PHYS_Connected:
_bis_SR_register (LPM3_bits + GIE);
_NOP();
中断;
//默认为瞬时状态执行
// ST_enum_in_progress。 通常、该状态仅持续少数几个状态
//秒。 确保在此状态下不进入 LPM3;USB
//此处正在进行通信,因此必须使用模式
//为 LPM0或有源 CPU。
实例 ST_ENUM_IN_PROGRESS:
默认值:;
}
}//while (1)
}//main()
/*
*==== UNMI_ISR ====
*
#if defined (__TI_Compiler_version__)||(__IAR_systems_ICC__)
#pragma vector = UNMI_Vector
_interrupt void UNMI_ISR (void)
#Elif defined (__GNU__)&&(__MSP430__)
void __attribute__((interrupt (UNMI_vector)) UNMI_ISR (void)
其他
找不到#ERROR 编译器!
#endif
{
开关(__evo_in_range (SYSUNIV、SYSUNIV_BUSIFG))
{
案例 SYSUNIV_NONE:
__no_operation();
中断;
SYSUNIV_NMIIFG 案例:
__no_operation();
中断;
SYSUNIV_OFIFG 案例:
UCS_clearFaultFlag (UCS_XT2OFFG);
UCS_clearFaultFlag (UCS_DCOFFG);
SFR_clearInterrupt (SFR_oscillator_FAULT_INTERRUPT);
中断;
案例 SYSUNIV_ACCVIFG:
__no_operation();
中断;
案例 SYSUNIV_BUSIFG:
//如果 CPU 在 USB 模块的同时访问 USB 内存
//挂起,可能会出现“总线错误”。 这会生成 NMI。 如果
// USB 在您的软件中自动断开连接,请设置 a
//在这里断点并查看执行是否成功。 请参阅
//编程人员指南以了解更多信息。
SYSBERRIV = 0;//清除总线错误标志
USB_disable();//Disable
}
}
代码2)从 MSP430F55xx_uscia0_UART_01.c 中删除、并对 USCI_A0进行了适当的调整以适应 USCI_A1:
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P4SEL |= BIT4+BIT4;// P3.3、4 = USCI_A0 TXD/RXD
UCA1CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCA1CTL1 |= UCSSEL_2;// SMCLK
UCA1BR0 = 9;// 1MHz 115200 (请参阅用户指南)
UCA1BR1 = 0;// 1MHz 115200
UCA1MCTL |= UCBRS_1 + UCBRF_0;//调制 UCBRSx=1、UCBRFx=0
UCA1CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCA1IE |= UCRXIE;//启用 USCI_A0 RX 中断
_bis_SR_register (LPM0_bits + GIE);
__no_operation();//用于调试器
//UART
// while (1);
}//main()
//回显 RXed 字符,确认 TX 缓冲区已准备就绪
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_vector
_interrupt void USCI_A1_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_A1_vector)) USCI_A1_ISR (void)
其他
错误编译器不受支持!
#endif
{
switch (__evo_in_range (UCA1IV、4))
{
情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
while (!(UCA1IFG&UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
UCA1TXBUF = UCA1RXBUF;// TX -> RXED 字符
中断;
情况4:中断;//向量4 - TXIFG
默认值:break;
}
}
谢谢大家。