This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/EK-TM4C123GXL:通过 UART 控制传感器集线器+伺服电机

Guru**** 2459550 points
Other Parts Discussed in Thread: EK-TM4C123GXL

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/648062/ccs-ek-tm4c123gxl-sensor-hub-servo-motor-controlled-via-uart

器件型号:EK-TM4C123GXL

工具/软件:Code Composer Studio

大家好、我的代码遇到了问题。 我 正在尝试从传感器集线器获取陀螺仪信息并 通过 uart1控制一个伺服。

另外、代码运行正常、但当我尝试组合时、当我尝试为 PWM (ROM_GPIOPinConfigure (GPIO_PB4_M0PWM2)配置引脚时、我会遇到问题;)我看到缓冲区被卡住。

这是代码,如果您在“简单”上(Ctrl+F),则问题的开始位置是。 我还在这里保存了项目 :

#include
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/SysTick .h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "sensorlib/hw_bmp180.h"
#include "sensorlib/i2cm_drv.h"
#include "sensorlib/bmp180.h"
#include "drivers/rgb.h"
#include "sensorlib/ak8975.h"
#include "sensorlib/mpu9150.h"
#include "sensorlib/mpu6050.h"
#include "sensorlib/hw_mpu9150.h"
#include
#include
#include
#include
#include
#include


#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_hibernate.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/hibernate.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/SysTick .h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/debug.h"
#include "driverlib/pwm.h"
#include "driverlib/pin_map.h"
#include "inc/hw_gpio.h"
#include "driverlib/rom.h"
#define PWM_FREQUENCY 55
//
//
//! \addtogroup example_list
//!

使用 BMP180测量压力(Pressure_bmp180)


//!
//! 此示例演示了传感器库 TM4C123G 的基本用法
//! LaunchPad 和 SensHub BoosterPack 来获取空气压力和
//! 使用 BMP180传感器进行温度测量。
//!
//! 将串行终端程序连接到 LaunchPad 的 ICDI 虚拟串行
//! 波特率为115、200波特。  每字节使用8位、无奇偶校验和1个停止位。
//! 原始传感器测量值打印到终端。  RGB LED
//! 初始化完成后、以1Hz 的频率闪烁、示例为
//! 运行。
//
//

//
//
//定义 BMP180 I2C 地址。
//
//
#define BMP180_I2C_ADDRESS     0x77
//
#define MPU9150_I2C_ADDRESS    0X68

//
//
//用于保存 RGB 颜色值的全局数组。
//
//
uint32_t g_pui32Colors[3];

//
//
// I2C 主驱动程序的全局实例结构。
//
//
tI2CMInstance g_sI2CInst;

//
//
// BMP180传感器驱动程序的全局实例结构。
//
//
tBMP180 g_sBMP180Inst;
//
// MPU9150传感器驱动程序的全局实例结构
//
//
tMPU9150 sMPU9150;
//
//
//全局新数据标志,以提醒 main BMP180数据已就绪。
//
//
volatile uint_fast8_t g_vui8DataFlag;

//
//
//完成 MPU9150命令后设置的布尔值。
//
//
volatile bool g_bMPU9150Done;

//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)


#endif

int32_t functie (int32_t n)

   int32_t rez;
   REZ = 2*n;
   返回(雷兹);


void comenzi (char *str、float *COM1、float *com2)


   浮点温度[3];
   char buffer[16];
   char com[5];
   int32_t i、j、k、p;
   int32_t n、ns、nf;

   i=0;j=0;k=0;p=0;
   N=0;ns=0;nf=0;

   strcpy (buffer、str);
   N=strlen (缓冲区);

   for (i=0;<n; i++))
   {
       if (buffer[i]='、')
       {
           NF = I;
           对于(j=ns;<nf;j++)
           {
               com[p]=缓冲器[j];
               P++;
           }
           com[p]='\0';
           temp[k]= atof (com);
               P  = 0;
               com[p]='\0';
               K++;
               Ns = I+1;
       }
   }

   *COM1 =temp[0];
   *com2 =temp[1]/2;

//
//
// BMP180传感器回调函数。  在 BMP180传感器驱动器的末尾调用
//交易。 这是从 I2C 中断上下文中调用的。 因此、我们只是这样
//设置一个标志并让 main 执行大量计算和显示。
//
//
void BMP180AppCallback (void* pvCallbackData、uint_fast8_t ui8Status)

   if (ui8Status = I2CM_STATUS_SUCCESS)
   {
       G_vui8DataFlag = 1;
   }

/*********
//
//此示例在 MPU9150时作为回调提供的函数
//交易已完成。
void MPU9150Callback (void * pvCallbackData、uint_fast8_t ui8Status)

   //
   //查看是否发生错误。
   //
   if (ui8Status!= I2CM_STATUS_SUCCESS)
   {
   //
   //发生了错误,所以如果需要,请在此处处理。
   //
   }
   //
   //表示 MPU9150传输已完成。
   //
   G_bMPU9150Done = true;


//
//
//由 NVIC 作为 I2C3中断的结果调用。 I2C3是 I2C 连接
//到 BMP180。
//
//
无效
BMP180I2CIntHandler (空)

   //
   //传递到传感器库提供的 I2CM 中断处理程序。
   //需要在应用程序级别执行此操作,以便 I2CMIntHandler 可以执行此操作
   //接收实例结构指针作为参数。
   //
   I2CMIntHandler (&g_sI2CInst);

//
//
//由 NVIC 作为 I2C3中断的结果调用。 I2C3是 I2C 连接
//至 MPU9150。
//
//
无效
MPU9150I2CIntHandler (空)

   //
   //传递到传感器库提供的 I2CM 中断处理程序。
   //需要在应用程序级别执行此操作,以便 I2CMIntHandler 可以执行此操作
   //接收实例结构指针作为参数。
   //
   I2CMIntHandler (&g_sI2CInst);

//
//
//由 NVIC 调用作为 SysTick 中断,用于生成
//采样间隔
//
//
无效
SysTickIntHandler()

   GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
   BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
   GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);

//
//
//配置 UART 及其引脚。  这必须在 UARTprintf()之前调用。
//
//
无效
配置 UART (空)

   //
   //启用 UART 使用的 GPIO 外设。
   //
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

   //
   //启用 UART0
   //
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

   //
   //为 UART 模式配置 GPIO 引脚。
   //
   ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
   ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
   ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

   //
   //使用内部16MHz 振荡器作为 UART 时钟源。
   //
   UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);

   //
   //初始化控制台 I/O 的 UART
   //
   UARTStdioConfig (0、9600、16000000);

//
//
//主"C"语言入口点。
//
//
内部
main (空)

   volatile uint32_t ui32Load;
         volatile uint32_t ui32PWMClock;
         volatile uint8_t ui8Adcust;
         ui8Adsit= 83;


   ////////////////////////////////////////////// ------
   fTemperature、fPressure、fAltitude;
   int32_t i32IntegerPart、i32IntegerPartAx、i32IntegerPartAy、i32IntegerPartAz;
   int32_t i32FractionPart、i32FractionPartAx、i32FractionPartAy、i32FractionPartAz;
   UINT_fast16_t TemperatureRaw;
   fAccel[3]、fGyro[3];
   uint_fast16_t fMagnete[3];


   //
   //将系统时钟设置为以晶体基准从 PLL 以40MHz 频率运行
   //
   ROM_SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz |
                      SYSCTL_OSC_MAIN);

   //
   //初始化 UART。
   //
   ConfigureUART();

   //
   //将欢迎消息打印到终端。
   //
   UARTprintf ("\033[2JBMP180示例\n");

   //
   //将颜色设置为白色近似值。
   //
   G_pui32Colors[红色]= 0x8000;
   G_pui32Colors[蓝色]= 0x8000;
   G_pui32Colors[绿色]= 0x8000;

   //
   //初始化 RGB 驱动器。 使用默认强度和闪烁速率。
   //
   RGBInit (0);
   RGBColorSet (g_pui32Colors);
   RGBIntensitySet (0.5f);
   RGBEnable();

   //
   //使用前必须启用 I2C3外设。
   //
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

   //
   //为端口 D0和 D1上的 I2C3功能配置引脚复用。
   //如果您的器件不支持引脚复用、则无需执行此步骤。
   //
   ROM_GPIOPinConfigure (GPIO_PD0_I2C3SCL);
   ROM_GPIOPinConfigure (GPIO_PD1_I2C3SDA);

   //
   //为这些引脚选择 I2C 功能。  此函数也会
   //为 I2C 操作配置 GPIO 引脚,将其设置为
   //开漏操作,弱上拉。  请参阅数据表
   //查看每个引脚分配了哪些功能。
   //
   GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
   ROM_GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1);

   //
   //初始化 LED 的 GPIO。
   //
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
   ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1);
   ROM_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);
   ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);
         ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
         ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
         ROM_GPIOPinTypePWM (GPIO_PORTD_BASE、GPIO_PIN_0);

   //
   //启用到处理器的中断。
   //
   ROM_IntMasterEnable();

   //
   //初始化 I2C3外设。
   //
   I2CMInit (&g_sI2CInst、I2C3_base、INT_I2C3、0xff、0xff、
            ROM_SysCtlClockGet ();

   //
   //初始化 BMP180。
   //
   BMP180Init (&g_sBMP180Inst、&g_sI2CInst、BMP180_I2C_address、
              BMP180AppCallback、&g_sBMP180Inst);

   //
   //等待初始化回调以指示复位请求已完成。
   //
   while (g_vui8DataFlag = 0)
   {
       //
       //等待 I2C 事务完成。
       //
   }

   //
   //重置数据就绪标志
   //
   G_vui8DataFlag = 0;

  //初始化 MPU9150。

   G_bMPU9150Done == false;

   MPU9150Init (&sMPU9150、&g_sI2CInst、MPU9150_I2C_address、MPU9150Callback、0);
   while (!g_bMPU9150Done)
   {

   }

   G_bMPU9150Done = false;

   MPU9150ReadModifyWrite (&sMPU9150、MPU9150_O_ACCEL_CONFIG、
   ~MPU9150_ACCEL_CONFIG_AFS_SEL_M、
   MPU9150_ACCEL_CONFIG_AFS_SEL_4G、MPU9150Callback、
   0);

   //
   //启用10Hz 的系统节拍。
   //
   ROM_SysTickPeriodSet (ROM_SysCtlClockGet ()/(10 * 3));
   ROM_SysTickIntEnable();
   ROM_SysTickEnable();

   //
   //在所有初始化和配置之后,我们开始闪烁 LED
   //
   RGBBlinkRateSet (1.0f);

   //
   //开始数据收集和打印。  永远循环。
//简单
   ROM_GPIOPinConfigure (GPIO_PB4_M0PWM2);
   ui32PWMClock = SysCtlClockGet ()/64;
        ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;

        PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN);
        PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ui32Load);

        ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ui8Adust * ui32Load / 1000);
        ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);
        ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_0);
        char g_cInput[16];
        浮动 D1、D2;

        ROM_FPUEnable();
        ROM_FPUStackingEnable();
        UARTprintf ("test");
   while (1)
   {


      if (UARTPeek ('\r')!=1)
              {
                  ///

                 ///

                  UARTgets (g_cInput、sizeof (g_cInput));
                  UARTprintf ("CE s-a printtat:%s\n"、g_cInput);
                  Comenzi (g_cInput、&D1、&D2);
                  UARTprintf ("%d、%d\n"、(int32_t) D1、(int32_t) D2);
              }


                         ui8Adcust =(int32_t) d1;

                     ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Load / 1000);

                ROM_SysCtlDelay (100000);


       //
       //通过 I2C 从 BMP180读取数据。  此命令用于启动
       //温度测量。  然后轮询、直到温度就绪。
       //然后自动开始压力测量并进行轮询
       //完成。 测量完成后、在本地进行测量
       //缓冲区、然后从 I2C 调用应用程序回调
       //中断上下文。  轮询在 I2C 中断允许的情况下完成
       //处理器继续执行所需的其他任务。
       //
       BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
       while (g_vui8DataFlag = 0)
       {
           //
           //等待新数据集可用。
           //
       }

       //
       //重置数据就绪标志。
       //
       G_vui8DataFlag = 0;

       while (!g_bMPU9150Done)
          {
          }

       G_bMPU9150Done = false;
       MPU9150DataRead (&sMPU9150、MPU9150Callback、0);
       while (!g_bMPU9150Done)
       {
       }

       MPU9150DataAccelGetFloat (&sMPU9150、&fAccel[0]、&fAccel[1]、&fAccel[2]);

       //
       //获取浮点格式的最新温度数据的本地副本。
       //
       BMP180DataTemperatureGetFloat (&g_sBMP180Inst、&fTemperature);
       BMP180DataTemperatureGetRaw (&g_sBMP180Inst、&TemperatureRaw);

       //
       //将浮点值转换为整数部分和小数部分以便于使用
       //打印。
       //
       /*
       i32IntegerPart =(int32_t) fTemperature;
       i32FractionPart =(int32_t)(fTemperature * 1000.0f);
       i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
       if (i32FractionPart < 0)
       {
           i32FractionPart *=-1;
       }
      *

       i32集成器件 Ax =(int32_t) fAccel[0];
       i32FractionPartAx =(int32_t)(fAccel[0]* 1000.0f);
       i32FractionPartAx = i32FractionPartAx -(i32IntegerPartAx * 1000);
       if (i32FractionPartAx < 0)
       {
           i32FractionPartAx *=-1;
       }

       i32IntegerPartAy =(int32_t) fAccel[1];
       i32FractionPartAy =(int32_t)(fAccel[1]* 1000.0f);
       i32FractionPartAy = i32FractionPartAy -(i32IntegerPartAy * 1000);

       if (i32FractionPartAy < 0)
       {
           i32FractionPartAy *=-1;
       }

       i32IntegerPartAz =(int32_t) fAccel[2];
       i32FractionPartAz =(int32_t)(fAccel[2]* 1000.0f);
       i32FractionPartAz = i32FractionPartAz -(i32IntegerPartAz * 1000);

       if (i32FractionPartAz < 0)
       {
           i32FractionPartAz *=-1;
       }

       //香蕉
       //打印精度为三位十进制的温度。
       //
       // UARTprintf ("温度%3d.%03d\t\t、i32IntegerPart、i32FractionPart);
       // UARTprintf ("%3d.%3d %3d.%3d.%3D"、i32IntegerPartAx、i32FractionPartAx、i32IntegerPartAy、i32FractionPartAy、 i32 IntegerPartAz、i32 FractionPartAz);
       UARTprintf ("%3d.%03d"、i32IntegerPartAx、i32FractionPartAx);
       UARTprintf ("、");
       UARTprintf ("%3d.%03d"、i32IntegerPartAy、i32FractionPartAy);
       UARTprintf ("、");
       UARTprintf ("%3d.%03d"、i32IntegerPartAz、i32FractionPartAz);

       //UARTprintf ("\033[5;63H%3D.%03d"、i32IntegerPartAx、i32FractionPartAx);
       //UARTprintf ("\033[5;63H%3D.%03d"、i32IntegerPartAy、i32FractionPartAy);

       //UARTprintf ("%3d.%3d \n"、i32IntegerPartAy、i32FractionPartAy);
       //UARTprintf ("%3d.%3d \n"、i32IntegerPartAz、i32FractionPartAz);
       // UARTprintf ("x %3d.%03d\t\t"、i32IntegerPart、i32FractionPart);
       // UARTprintf ("%d"、fAccel[2]);
       // UARTprintf ("Pressure %.6F"、fTemperature);
       //
       //获取浮点格式的最新气压数据的本地副本。
       //
       //BMP180DataPressureGetFloat (&g_sBMP180Inst、&fPressure);
       MPU9150DataMagnetoGetRaw (&sMPU9150、&fMagneto[0]、&fMagneto[1]、&fMagneto[2]);

       //
       //将浮点值转换为整数部分和小数部分以便于使用
       //打印。
       //
       i32IntegerPart =(int32_t) fMagnete[0];
       i32FractionPart =(Int32_t)(fMagnete[0]* 1000.0f);
       i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
       if (i32FractionPart < 0)
       {
           i32FractionPart *=-1;
       }

       //
       //打印压力,三位十进制精度。
       //
       //UARTprintf ("MagX %3d.%03d\t\t"、i32IntegerPart、i32FractionPart);

       //
       //计算海拔高度。
       //
       fAltitude = 44330.0f *(1.0f - powf (fPressure / 101325.0f、
                                           1.0f / 5.255f);

       //
       //将浮点值转换为整数部分和小数部分以便于使用
       //打印。
       //
       i32 IntegerPart =(int32_t) fAltitude;
       i32FractionPart =(int32_t)(fAltitude * 1000.0f);
       i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
       if (i32FractionPart < 0)
       {
           i32FractionPart *=-1;
       }

       //
       //打印高度,三位十进制精度。
       //
       //UARTprintf ("海拔%3d.%03d"、i32IntegerPart、i32FractionPart);

       //
       //打印新行。
       //
       UARTprintf ("\n");

       //
       //延迟以保持打印速度合理。 大约100毫秒。
       //
       ROM_SysCtlDelay (ROM_SysCtlClockGet ()/(10 * 3));

   }//while 结束

e2e.ti.com/.../test.7z

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您正在尝试使用 M0PWM2。 这是与第一个 PWM 模块关联的 PWM 引脚、该模块应为 SYS_Periph_PWM0。 但我看到您在打电话 而是 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好,感谢您的回答,我已经成功地让它显示了 mpu9150的数据,并从 UART 获取我的输入,但它仍然不会移动伺服。


    代码如下:
    //
    //
    // Pressure_bmp180.c -将 SensorLib 与 BMP180搭配使用的示例
    //
    //版权所有(c) 2013-2017 Texas Instruments Incorporated。 保留所有权利。
    //软件许可协议
    //
    //德州仪器(TI)仅提供和使用此软件
    //专门用于 TI 的微控制器产品。 该软件归其所有
    // TI 和/或其供应商、受适用版权保护
    //法律。 您不能将此软件与"病毒"开源软件结合使用
    //软件,以便形成一个更大的程序。
    //
    //此软件按“原样”提供,且存在所有故障。
    //不作任何明示、暗示或法定的保证,包括但
    //不限于对适销性和适用性的暗示保证
    //此软件的特定用途。 TI 不得以任何方式进行
    //情况,对特殊、偶然或从属事件负责
    //任何原因造成的损害。
    //
    //这是 EK-TM4C123GXL 固件包版本2.1.4.178的一部分。
    //
    //

    #include
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include "sensorlib/hw_bmp180.h"
    #include "sensorlib/i2cm_drv.h"
    #include "sensorlib/bmp180.h"
    #include "drivers/rgb.h"
    #include "sensorlib/ak8975.h"
    #include "sensorlib/mpu9150.h"
    #include "sensorlib/mpu6050.h"
    #include "sensorlib/hw_mpu9150.h"
    #include
    #include
    #include
    #include
    #include
    #include


    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_hibernate.h"
    #include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/hibernate.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/debug.h"
    #include "driverlib/pwm.h"
    #include "driverlib/pin_map.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/rom.h"
    #define PWM_FREQUENCY 55
    //
    //
    //! \addtogroup example_list
    //!

    使用 BMP180测量压力(Pressure_bmp180)


    //!
    //! 此示例演示了传感器库 TM4C123G 的基本用法
    //! LaunchPad 和 SensHub BoosterPack 来获取空气压力和
    //! 使用 BMP180传感器进行温度测量。
    //!
    //! 将串行终端程序连接到 LaunchPad 的 ICDI 虚拟串行
    //! 波特率为115、200波特。 每字节使用8位、无奇偶校验和1个停止位。
    //! 原始传感器测量值打印到终端。 RGB LED
    //! 初始化完成后、以1Hz 的频率闪烁、示例为
    //! 运行。
    //
    //

    //
    //
    //定义 BMP180 I2C 地址。
    //
    //
    #define BMP180_I2C_ADDRESS 0x77
    //
    #define MPU9150_I2C_ADDRESS 0X68

    //
    //
    //用于保存 RGB 颜色值的全局数组。
    //
    //
    uint32_t g_pui32Colors[3];

    //
    //
    // I2C 主驱动程序的全局实例结构。
    //
    //
    tI2CMInstance g_sI2CInst;

    //
    //
    // BMP180传感器驱动程序的全局实例结构。
    //
    //
    tBMP180 g_sBMP180Inst;
    //
    // MPU9150传感器驱动程序的全局实例结构
    //
    //
    tMPU9150 sMPU9150;
    //
    //
    //全局新数据标志,以提醒 main BMP180数据已就绪。
    //
    //
    volatile uint_fast8_t g_vui8DataFlag;

    //
    //
    //完成 MPU9150命令后设置的布尔值。
    //
    //
    volatile bool g_bMPU9150Done;

    //
    //
    //驱动程序库遇到错误时调用的错误例程。
    //
    //
    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    int32_t functie (int32_t n)

    int32_t rez;
    REZ = 2*n;
    返回(雷兹);



    void comenzi (char *str、float *COM1、float *com2)




    浮点温度[3];
    char buffer[16];
    char com[5];
    int32_t i、j、k、p;
    int32_t n、ns、nf;

    i=0;j=0;k=0;p=0;
    N=0;ns=0;nf=0;

    strcpy (buffer、str);
    N=strlen (缓冲区);

    for (i=0;<n; i++))

    if (buffer[i]='、')

    NF = I;
    对于(j=ns;<nf;j++)

    com[p]=缓冲器[j];
    P++;

    com[p]='\0';
    temp[k]= atof (com);
    P = 0;
    com[p]='\0';
    K++;
    Ns = I+1;



    *COM1 =temp[0];
    *com2 =temp[1]/2;

    //
    //
    // BMP180传感器回调函数。 在 BMP180传感器驱动器的末尾调用
    //交易。 这是从 I2C 中断上下文中调用的。 因此、我们只是这样
    //设置一个标志并让 main 执行大量计算和显示。
    //
    //
    void BMP180AppCallback (void* pvCallbackData、uint_fast8_t ui8Status)

    if (ui8Status = I2CM_STATUS_SUCCESS)

    G_vui8DataFlag = 1;



    /*********
    //
    //此示例在 MPU9150时作为回调提供的函数
    //交易已完成。
    void MPU9150Callback (void * pvCallbackData、uint_fast8_t ui8Status)

    //
    //查看是否发生错误。
    //
    if (ui8Status!= I2CM_STATUS_SUCCESS)

    //
    //发生了错误,所以如果需要,请在此处处理。
    //

    //
    //表示 MPU9150传输已完成。
    //
    G_bMPU9150Done = true;



    //
    //
    //由 NVIC 作为 I2C3中断的结果调用。 I2C3是 I2C 连接
    //到 BMP180。
    //
    //
    无效
    BMP180I2CIntHandler (空)

    //
    //传递到传感器库提供的 I2CM 中断处理程序。
    //需要在应用程序级别执行此操作,以便 I2CMIntHandler 可以执行此操作
    //接收实例结构指针作为参数。
    //
    I2CMIntHandler (&g_sI2CInst);

    //
    //
    //由 NVIC 作为 I2C3中断的结果调用。 I2C3是 I2C 连接
    //至 MPU9150。
    //
    //
    无效
    MPU9150I2CIntHandler (空)

    //
    //传递到传感器库提供的 I2CM 中断处理程序。
    //需要在应用程序级别执行此操作,以便 I2CMIntHandler 可以执行此操作
    //接收实例结构指针作为参数。
    //
    I2CMIntHandler (&g_sI2CInst);


    //
    //
    //由 NVIC 调用作为 SysTick 中断,用于生成
    //采样间隔
    //
    //
    无效
    SysTickIntHandler()

    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
    BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
    GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);


    //
    //
    //配置 UART 及其引脚。 这必须在 UARTprintf()之前调用。
    //
    //
    无效
    配置 UART (空)

    //
    //启用 UART 使用的 GPIO 外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //启用 UART0
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

    //
    //为 UART 模式配置 GPIO 引脚。
    //
    ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //使用内部16MHz 振荡器作为 UART 时钟源。
    //
    UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);

    //
    //初始化控制台 I/O 的 UART
    //
    UARTStdioConfig (0、9600、16000000);


    //
    //
    //主"C"语言入口点。
    //
    //
    内部
    main (空)


    volatile uint32_t ui32Load;
    volatile uint32_t ui32PWMClock;
    volatile uint8_t ui8Adcust;
    ui8Adsit= 83;





    //////////////////////////////////////////////////////////////////// --------------------




    ////////////////////////////////////////////// ------
    fTemperature、fPressure、fAltitude;
    int32_t i32IntegerPart、i32IntegerPartAx、i32IntegerPartAy、i32IntegerPartAz;
    int32_t i32FractionPart、i32FractionPartAx、i32FractionPartAy、i32FractionPartAz;
    UINT_fast16_t TemperatureRaw;
    fAccel[3]、fGyro[3];
    uint_fast16_t fMagnete[3];


    //
    //将系统时钟设置为以晶体基准从 PLL 以40MHz 频率运行
    //
    ROM_SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz |
    SYSCTL_OSC_MAIN);
    ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);

    //
    //初始化 UART。
    //
    ConfigureUART();

    //
    //将欢迎消息打印到终端。
    //
    UARTprintf ("\033[2JBMP180示例\n");

    //
    //将颜色设置为白色近似值。
    //
    G_pui32Colors[红色]= 0x8000;
    G_pui32Colors[蓝色]= 0x8000;
    G_pui32Colors[绿色]= 0x8000;

    //
    //初始化 RGB 驱动器。 使用默认强度和闪烁速率。
    //
    RGBInit (0);
    RGBColorSet (g_pui32Colors);
    RGBIntensitySet (0.5f);
    RGBEnable();

    //
    //使用前必须启用 I2C3外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

    //
    //为端口 D0和 D1上的 I2C3功能配置引脚复用。
    //如果您的器件不支持引脚复用、则无需执行此步骤。
    //
    ROM_GPIOPinConfigure (GPIO_PD0_I2C3SCL);
    ROM_GPIOPinConfigure (GPIO_PD1_I2C3SDA);
    GPIOPinConfigure (GPIO_PF1_M1PWM5);
    GPIOPinConfigure (GPIO_PF2_M1PWM6);
    GPIOPinConfigure (GPIO_PF3_M1PWM7);
    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
    PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
    PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

    //
    //为这些引脚选择 I2C 功能。 此函数也会
    //为 I2C 操作配置 GPIO 引脚,将其设置为
    //开漏操作,弱上拉。 请参阅数据表
    //查看每个引脚分配了哪些功能。
    //
    GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
    ROM_GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1);

    //
    //初始化 LED 的 GPIO。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1);
    ROM_GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);
    ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    ROM_GPIOPinTypePWM (GPIO_PORTD_BASE、GPIO_PIN_0);

    //
    //启用到处理器的中断。
    //
    ROM_IntMasterEnable();

    //
    //初始化 I2C3外设。
    //
    I2CMInit (&g_sI2CInst、I2C3_base、INT_I2C3、0xff、0xff、
    ROM_SysCtlClockGet ();

    //
    //初始化 BMP180。
    //
    BMP180Init (&g_sBMP180Inst、&g_sI2CInst、BMP180_I2C_address、
    BMP180AppCallback、&g_sBMP180Inst);

    //
    //等待初始化回调以指示复位请求已完成。
    //
    while (g_vui8DataFlag = 0)

    //
    //等待 I2C 事务完成。
    //


    //
    //重置数据就绪标志
    //
    G_vui8DataFlag = 0;

    //初始化 MPU9150。

    G_bMPU9150Done == false;

    MPU9150Init (&sMPU9150、&g_sI2CInst、MPU9150_I2C_address、MPU9150Callback、0);
    while (!g_bMPU9150Done)




    G_bMPU9150Done = false;

    MPU9150ReadModifyWrite (&sMPU9150、MPU9150_O_ACCEL_CONFIG、
    ~MPU9150_ACCEL_CONFIG_AFS_SEL_M、
    MPU9150_ACCEL_CONFIG_AFS_SEL_4G、MPU9150Callback、
    0);

    //
    //启用10Hz 的系统节拍。
    //
    ROM_SysTickPeriodSet (ROM_SysCtlClockGet ()/(10 * 3));
    ROM_SysTickIntEnable();
    ROM_SysTickEnable();

    //
    //在所有初始化和配置之后,我们开始闪烁 LED
    //
    RGBBlinkRateSet (1.0f);

    //
    //开始数据收集和打印。 永远循环。
    //ROM_GPIOPinConfigure (GPIO_PB4_M0PWM2);
    /* ui32PWMClock = SysCtlClockGet ()/64;
    ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;

    PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN);
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ui32Load);

    ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ui8Adust * ui32Load / 1000);
    ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);
    ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_0);
    char g_cInput[16];
    浮动 D1、D2;

    ROM_FPUEnable();
    ROM_FPUStackingEnable();*/
    ui32PWMClock = SysCtlClockGet ()/64;
    ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;
    PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);
    PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);
    PWMGenPeriodSet (PWM1_base、PWM_GEN_2、ui32Load);
    PWMGenPeriodSet (PWM1_base、PWM_GEN_3、ui32Load);
    PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Ad正义* ui32Load / 1000);
    PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Ad正义* ui32Load / 1000);
    PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Ad正义* ui32Load / 1000);
    PWMGenEnable (PWM1_base、PWM_GEN_2);
    PWMGenEnable (PWM1_base、PWM_GEN_3);
    PWMOutputState (PWM1_base、PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、true);
    char g_cInput[16];
    浮动 D1、D2;

    ROM_FPUEnable();
    ROM_FPUStackingEnable();

    UARTprintf ("test");
    while (1)



    /* if (UARTPeek ('\r\n')!=1)

    ///



    ///

    UARTgets (g_cInput、sizeof (g_cInput));
    UARTprintf ("CE s-a printtat:%s\n"、g_cInput);
    Comenzi (g_cInput、&D1、&D2);
    UARTprintf ("%d、%d\n"、(int32_t) D1、(int32_t) D2);





    ui8Adcust =(int32_t) d1;

    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Load / 1000);

    ROM_SysCtlDelay (100000);

    *

    if (UARTPeek ('\r')!=1)

    ///



    ///

    UARTgets (g_cInput、sizeof (g_cInput));
    UARTprintf ("CE s-a printtat:%s\n"、g_cInput);
    Comenzi (g_cInput、&D1、&D2);
    UARTprintf ("%d、%d\n"、(int32_t) D1、(int32_t) D2);





    ui8Adcust =(int32_t) d1;


    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Adust * ui32Load / 1000);
    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Adust * ui32Load / 1000);
    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Adust * ui32Load / 1000);
    ROM_SysCtlDelay (100000);


    //
    //通过 I2C 从 BMP180读取数据。 此命令用于启动
    //温度测量。 然后轮询、直到温度就绪。
    //然后自动开始压力测量并进行轮询
    //完成。 测量完成后、在本地进行测量
    //缓冲区、然后从 I2C 调用应用程序回调
    //中断上下文。 轮询在 I2C 中断允许的情况下完成
    //处理器继续执行所需的其他任务。
    //


    BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
    while (g_vui8DataFlag = 0)

    //
    //等待新数据集可用。
    //


    //
    //重置数据就绪标志。
    //
    G_vui8DataFlag = 0;

    while (!g_bMPU9150Done)



    G_bMPU9150Done = false;
    MPU9150DataRead (&sMPU9150、MPU9150Callback、0);
    while (!g_bMPU9150Done)



    MPU9150DataAccelGetFloat (&sMPU9150、&fAccel[0]、&fAccel[1]、&fAccel[2]);

    //
    //获取浮点格式的最新温度数据的本地副本。
    //
    BMP180DataTemperatureGetFloat (&g_sBMP180Inst、&fTemperature);
    BMP180DataTemperatureGetRaw (&g_sBMP180Inst、&TemperatureRaw);

    //
    //将浮点值转换为整数部分和小数部分以便于使用
    //打印。
    //
    /*
    i32IntegerPart =(int32_t) fTemperature;
    i32FractionPart =(int32_t)(fTemperature * 1000.0f);
    i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
    if (i32FractionPart < 0)

    i32FractionPart *=-1;

    *

    i32集成器件 Ax =(int32_t) fAccel[0];
    i32FractionPartAx =(int32_t)(fAccel[0]* 1000.0f);
    i32FractionPartAx = i32FractionPartAx -(i32IntegerPartAx * 1000);
    if (i32FractionPartAx < 0)

    i32FractionPartAx *=-1;


    i32IntegerPartAy =(int32_t) fAccel[1];
    i32FractionPartAy =(int32_t)(fAccel[1]* 1000.0f);
    i32FractionPartAy = i32FractionPartAy -(i32IntegerPartAy * 1000);

    if (i32FractionPartAy < 0)

    i32FractionPartAy *=-1;


    i32IntegerPartAz =(int32_t) fAccel[2];
    i32FractionPartAz =(int32_t)(fAccel[2]* 1000.0f);
    i32FractionPartAz = i32FractionPartAz -(i32IntegerPartAz * 1000);

    if (i32FractionPartAz < 0)

    i32FractionPartAz *=-1;






    //香蕉
    //打印精度为三位十进制的温度。
    //
    // UARTprintf ("温度%3d.%03d\t\t、i32IntegerPart、i32FractionPart);
    // UARTprintf ("%3d.%3d %3d.%3d.%3D"、i32IntegerPartAx、i32FractionPartAx、i32IntegerPartAy、i32FractionPartAy、 i32 IntegerPartAz、i32 FractionPartAz);
    UARTprintf ("%3d.%03d"、i32IntegerPartAx、i32FractionPartAx);
    UARTprintf ("、");
    UARTprintf ("%3d.%03d"、i32IntegerPartAy、i32FractionPartAy);
    UARTprintf ("、");
    UARTprintf ("%3d.%03d"、i32IntegerPartAz、i32FractionPartAz);

    //UARTprintf ("\033[5;63H%3D.%03d"、i32IntegerPartAx、i32FractionPartAx);
    //UARTprintf ("\033[5;63H%3D.%03d"、i32IntegerPartAy、i32FractionPartAy);



    //UARTprintf ("%3d.%3d \n"、i32IntegerPartAy、i32FractionPartAy);
    //UARTprintf ("%3d.%3d \n"、i32IntegerPartAz、i32FractionPartAz);
    // UARTprintf ("x %3d.%03d\t\t"、i32IntegerPart、i32FractionPart);
    // UARTprintf ("%d"、fAccel[2]);
    // UARTprintf ("Pressure %.6F"、fTemperature);
    //
    //获取浮点格式的最新气压数据的本地副本。
    //
    //BMP180DataPressureGetFloat (&g_sBMP180Inst、&fPressure);
    MPU9150DataMagnetoGetRaw (&sMPU9150、&fMagneto[0]、&fMagneto[1]、&fMagneto[2]);

    //
    //将浮点值转换为整数部分和小数部分以便于使用
    //打印。
    //
    i32IntegerPart =(int32_t) fMagnete[0];
    i32FractionPart =(Int32_t)(fMagnete[0]* 1000.0f);
    i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
    if (i32FractionPart < 0)

    i32FractionPart *=-1;


    //
    //打印压力,三位十进制精度。
    //
    //UARTprintf ("MagX %3d.%03d\t\t"、i32IntegerPart、i32FractionPart);

    //
    //计算海拔高度。
    //
    fAltitude = 44330.0f *(1.0f - powf (fPressure / 101325.0f、
    1.0f / 5.255f);

    //
    //将浮点值转换为整数部分和小数部分以便于使用
    //打印。
    //
    i32 IntegerPart =(int32_t) fAltitude;
    i32FractionPart =(int32_t)(fAltitude * 1000.0f);
    i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
    if (i32FractionPart < 0)

    i32FractionPart *=-1;


    //
    //打印高度,三位十进制精度。
    //
    //UARTprintf ("海拔%3d.%03d"、i32IntegerPart、i32FractionPart);

    //
    //打印新行。
    //
    UARTprintf ("\n");

    //
    //延迟以保持打印速度合理。 大约100毫秒。
    //
    ROM_SysCtlDelay (ROM_SysCtlClockGet ()/(10 * 3));

    }//while 结束
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请注意、虽然"您容易"(努力自由)您在这里的"轰炸"(通过"如此多的代码")(大多数在您的问题之外)向您的"将会"帮助者证明"累得"。

    在学校里——或者“工作中”——你必须“考虑他人”——这不是真的吗? 用"轻松"来换取"我们的奋斗"证明不是一种有效的做法... (即使您(正确)格式化代码-用于论坛演示...)、这也是"正确"的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉让您和其他帮助者感到不安、感谢您的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用粘贴代码会大有帮助。 (请参阅插入代码、附加文件等...) 然后选择 图标、然后在弹出窗口中单击。 否则、代码几乎无法以可读的方式进行格式化。

    您应该能够返回并编辑您之前的帖子以进行改进。

    Robert
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    然而-即使有了这一改进-寻找寻找和协助将是痛苦的-将花费时间和精力!

    正如"您已注意到"(不止一次)、海报不应在海报问题上做出(已研究)努力来"拉紧患者"(即展示那些"有"影响"的代码方面)? 简单地说、"粘贴到百科全书"就会排气、并且对"助手 crüe……"的裂纹(即没有)不关心/关心

    很明显-你/我可以单独或组合"解决"海报的问题。    然而、"涉水通过"大量外部代码"(即使格式正确、但外部代码)证明、"没有吸引力!"    这不是我的意图,而是提供一种"高级手段"来"与他人交往",特别是当一个人"向陌生人寻求好处"时!    

    使"助手 crüe 的努力"复杂化-同时放宽海报的要求-没有什么意义-应该得到(一些)考虑-不应该这样做?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在代码中看到以下行以使用 PWM0。 但是您没有使用 SysCtlPeripheralEnable (SYSCTL_Periph_PWM0)启用 PWM0、也不会配置引脚多路复用器以输出您选择的 M0PWMx 引脚。



    PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN);
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ui32Load);

    ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ui8Adust * ui32Load / 1000);
    ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);
    ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_0);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    为了正确地"拉取该患者"、我已捕获所有"PWM"的引用-并在此处展示(极大地)方便阅读/审阅。   (即"建模"我们的海报"应该做什么"、以"快速、轻松、增强"她(无电)的帮助者的努力...

    当您"发现"缺少 "PWM0使能"时-海报报告她的代码确实运行-并注意(在突出显示部分中显示)两个这样的提到 "PWM1使能"。    请注意,我曾单独“  crüe:不用说轰炸无关的代码”——难道不清楚这可能“掩盖、拖延和混淆”她的企图——当然还有你的那些“不幸的”。  怀疑此代码跳线导致 PWM1使能的错误重复-实际上、PWM1和 PWM0都喜欢这种使能!    (如果不是这样-她的代码如何运行?)

    SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

    GPIOPinConfigure (GPIO_PF1_M1PWM5);

    GPIOPinConfigure (GPIO_PF2_M1PWM6);

    GPIOPinConfigure (GPIO_PF3_M1PWM7);

    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);

    PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

    PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

    ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

    ROM_GPIOPinTypePWM (GPIO_PORTD_BASE、GPIO_PIN_0);

    PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN);

    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ui32Load);

    ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ui8Adust * ui32Load / 1000);

    ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);

    ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_0);

    PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);

    PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);

    PWMGenPeriodSet (PWM1_base、PWM_GEN_2、ui32Load);

    PWMGenPeriodSet (PWM1_base、PWM_GEN_3、ui32Load);

    PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Ad正义* ui32Load / 1000);

    PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Ad正义* ui32Load / 1000);

    PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Ad正义* ui32Load / 1000);

    PWMGenEnable (PWM1_base、PWM_GEN_2);

    PWMGenEnable (PWM1_base、PWM_GEN_3);

    PWMOutputState (PWM1_base、PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、true);

    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui8Adust * ui32Load / 1000);

    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Adust * ui32Load / 1000);

    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Adust * ui32Load / 1000);

    ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Adust * ui32Load / 1000);

    她最近报告说“无伺服操作”-但是“没有注释此代码的一行”... 我们(无此可知)如何知道-哪些代码行证明了犯罪者?

    作为"PC"不应使(效率极低的方法 、即所有代码的洗衣列表)"伪装代码错误-减少辅助人员和海报的注意力-和进食(不必要的时间/精力!)   您是否同意(尝试)将代码限制为"最适用"方法比"阳光下的一切"更好、"他们会明白!"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的所有帮助、我将使代码更清晰、并删除注释、或许我能够看到问题所在。感谢您的支持、很抱歉耽误了时间。 这对我来说是新的、我以前没有在任何论坛上发布过。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请注意、并非"大量评论"、而是他们的"缺席"干扰和混淆了您的帮助者。    注释很好-即使您有时也可能-要求"确认"您正在"非常相似"的代码块中"查看正确的位置"!   由于您对 PWM 输出有"如此多"的引用(无注释)、我们怎么可能知道"哪一个"针对您的伺服?

    了解通过"限制您的注意力"(如 kiss 要求)、您有更大的机会发现错误、或者至少找到"行为错误的代码块"。

    此外、随着您的代码的增长和增长、您是否不会很难"简单导航?"    我认为、更好的方法是设计小代码块-目标明确但有限-不需要"无限寻呼"即可找到目标特性/功能。

    您"复制/导入/添加到"如此之大"的代码、使您的掌握与不可能的情况相一致。   更小、高度集中且(始终注释)的代码-"速度、易用性、增强"您的工作、同时"快裂"助手 crüe 使"吸收变得容易得多"。

    这种以及早期的写法并不意味着"是"意思",而是他们努力"另一个演示文稿"做理由",即您的帖子(不幸的)所呈现的"混乱",以及(极大地)使"帮助者"复杂化。    (以及您自己的代码测试和开发...)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我成功地使它工作。如果有人需要一个从 mpu9150 (集线器)获得加速并控制来自 UART 的3个伺服的项目、这里就是这样的

    祝你度过美好的一天!


    #include
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include "sensorlib/hw_bmp180.h"
    #include "sensorlib/i2cm_drv.h"
    #include "sensorlib/bmp180.h"
    #include "drivers/rgb.h"
    #include "sensorlib/ak8975.h"
    #include "sensorlib/mpu9150.h"
    #include "sensorlib/mpu6050.h"
    #include "sensorlib/hw_mpu9150.h"
    #include
    #include
    #include
    #include
    #include
    #include


    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_hibernate.h"
    #include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/hibernate.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/debug.h"
    #include "driverlib/pwm.h"
    #include "driverlib/pin_map.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/rom.h"
    #define PWM_FREQUENCY 55

    #define BMP180_I2C_ADDRESS     0x77

    #define MPU9150_I2C_ADDRESS    0X68


    #define LED_PERIPh SYSCTL_PERIPH_GPIOF
    #define LED_base GPIO_PORTF_BASE
    #define RED_LED GPIO_PIN_1

    uint32_t g_pui32Colors[3];


    tI2CMInstance g_sI2CInst;


    tBMP180 g_sBMP180Inst;

    tMPU9150 sMPU9150;

    volatile uint_fast8_t g_vui8DataFlag;


    volatile bool g_bMPU9150Done;


    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    int32_t functie (int32_t n)

       int32_t rez;
       REZ = 2*n;
       返回(雷兹);


    void comenzi (char * str、float * COM1、float * com2、float * com3)


       浮点温度[5];
       char buffer[16];
       char com[7];
       int32_t i、j、k、p;
       int32_t n、ns、nf;

       i=0;j=0;k=0;p=0;
       N=0;ns=0;nf=0;

       strcpy (buffer、str);
       N=strlen (缓冲区);

       for (i=0;<n; i++))
       {
           if (buffer[i]='、')
           {
               NF = I;
               对于(j=ns;<nf;j++)
               {
                   com[p]=缓冲器[j];
                   P++;
               }
               com[p]='\0';
               temp[k]= atof (com);
                   P  = 0;
                   com[p]='\0';
                   K++;
                   Ns = I+1;
           }
       }

       *COM1 =temp[0];
       * com2 =temp[1];
       * COM3 =temp[2];

    void BMP180AppCallback (void* pvCallbackData、uint_fast8_t ui8Status)

       if (ui8Status = I2CM_STATUS_SUCCESS)
       {
           G_vui8DataFlag = 1;
       }


    void MPU9150Callback (void * pvCallbackData、uint_fast8_t ui8Status)

       if (ui8Status!= I2CM_STATUS_SUCCESS)
       {

       }

       G_bMPU9150Done = true;

    无效
    BMP180I2CIntHandler (空)

       I2CMIntHandler (&g_sI2CInst);

    无效
    MPU9150I2CIntHandler (空)

       I2CMIntHandler (&g_sI2CInst);


    无效
    SysTickIntHandler()

       BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);


    /*void
    配置 UART (空)

       //
       //启用 UART 使用的 GPIO 外设。
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

       //
       //启用 UART1
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);

       //
       //为 UART 模式配置 GPIO 引脚。
       //
       ROM_GPIOPinConfigure (GPIO_PB0_U1RX);
       ROM_GPIOPinConfigure (GPIO_PB1_U1TX);
       ROM_GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

       //
       //使用内部16MHz 振荡器作为 UART 时钟源。
       //
       UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);

       //
       //初始化控制台 I/O 的 UART
       //
       //UARTStdioConfig (0、115200、16000000);
       UARTStdioConfig (1、9600、16000000);
    }*/
    无效
    配置 UART (空)

       //
       //启用 UART 使用的 GPIO 外设。
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

       //
       //启用 UART0
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

       //
       //为 UART 模式配置 GPIO 引脚。
       //
       ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
       ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
       ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

       //
       //使用内部16MHz 振荡器作为 UART 时钟源。
       //
       UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);


       UARTStdioConfig (0、9600、16000000);


    内部
    main (空)

       volatile uint32_t ui32Load;
            volatile uint32_t ui32PWMClock;
            volatile uint8_t ui8Adc公正、ui8Adjust1、ui8Adjust2;
            ui8Adsit= 83;


            SysCtlPeripheralEnable (LED_Periph);
            SysCtlDelay(3);


       fTemperature、fPressure、fAltitude;
       int32_t i32IntegerPart、i32IntegerPartAx、i32IntegerPartAy、i32IntegerPartAz;
       int32_t i32FractionPart、i32FractionPartAx、i32FractionPartAy、i32FractionPartAz;
       UINT_fast16_t TemperatureRaw;
       fAccel[3]、fGyro[3];
       uint_fast16_t fMagnete[3];

       ROM_SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz |
                          SYSCTL_OSC_MAIN);
       ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);


       ConfigureUART();


       UARTprintf ("\033[2JBMP180示例\n");


       G_pui32Colors[红色]= 0x8000;
       G_pui32Colors[蓝色]= 0x8000;
       G_pui32Colors[绿色]= 0x8000;


    /*   RGBInit(0);
       RGBColorSet (g_pui32Colors);
       RGBIntensitySet (0.5f);
       RGBEnable();
    *


       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

       ROM_GPIOPinConfigure (GPIO_PD0_I2C3SCL);
       ROM_GPIOPinConfigure (GPIO_PD1_I2C3SDA);

       GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
       ROM_GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1);


             SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

              GPIOPinConfigure (GPIO_PF1_M1PWM5);
              GPIOPinConfigure (GPIO_PF2_M1PWM6);
              GPIOPinConfigure (GPIO_PF3_M1PWM7);
              GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
              PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
              PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);


              ui32PWMClock = SysCtlClockGet ()/64;
              ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;

              PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_2、ui32Load);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_3、ui32Load);


              PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Ad正义* ui32Load / 1000);
              PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Ad正义* ui32Load / 1000);
              PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Ad正义* ui32Load / 1000);

              PWMGenEnable (PWM1_base、PWM_GEN_2);
              PWMGenEnable (PWM1_base、PWM_GEN_3);
              PWMOutputState (PWM1_base、PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、true);


       ROM_IntMasterEnable();


       I2CMInit (&g_sI2CInst、I2C3_base、INT_I2C3、0xff、0xff、
                ROM_SysCtlClockGet ();


       BMP180Init (&g_sBMP180Inst、&g_sI2CInst、BMP180_I2C_address、
                  BMP180AppCallback、&g_sBMP180Inst);

       while (g_vui8DataFlag = 0)
       {

       }


       G_vui8DataFlag = 0;

       G_bMPU9150Done == false;

       MPU9150Init (&sMPU9150、&g_sI2CInst、MPU9150_I2C_address、MPU9150Callback、0);
       while (!g_bMPU9150Done)
       {

       }

       G_bMPU9150Done = false;

       MPU9150ReadModifyWrite (&sMPU9150、MPU9150_O_ACCEL_CONFIG、
       ~MPU9150_ACCEL_CONFIG_AFS_SEL_M、
       MPU9150_ACCEL_CONFIG_AFS_SEL_4G、MPU9150Callback、
       0);


       ROM_SysTickPeriodSet (ROM_SysCtlClockGet ()/(10 * 3));
       ROM_SysTickIntEnable();
       ROM_SysTickEnable();

      // RGBBlinkRateSet (1.0f);


       ui32PWMClock = SysCtlClockGet ()/64;
             ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;
             PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);
                   PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);
                   PWMGenPeriodSet (PWM1_base、PWM_GEN_2、ui32Load);
                   PWMGenPeriodSet (PWM1_base、PWM_GEN_3、ui32Load);
                   PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Ad正义* ui32Load / 1000);
                   PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Ad正义* ui32Load / 1000);

                PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Ad正义* ui32Load / 1000);
                PWMGenEnable (PWM1_base、PWM_GEN_2);
                PWMGenEnable (PWM1_base、PWM_GEN_3);
                PWMOutputState (PWM1_base、PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、true);
                char g_cInput[16];
                   浮点 D1、D2、D3;

                   ROM_FPUEnable();
                   ROM_FPUStackingEnable();

            UARTprintf ("test");
       while (1)
       {


           if (UARTPeek ('\r')!=1)
                  {


                      UARTgets (g_cInput、sizeof (g_cInput));
                      UARTprintf ("CE s-a printtat:%s\n"、g_cInput);
                      Comenzi (g_cInput、&D1、&D2、&D3);
                      UARTprintf ("%d、%d、%d\n"、(int32_t) D1、(int32_t) D2、(int32_t) D3);
                      ui8Adcust =(int32_t) d1;
                      ui8Adjust1 =(Int32_t) D2;
                      ui8Adjust2 =(Int32_t) D3;


                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Adust * ui32Load / 1000);
                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Adjust1 * ui32Load / 1000);
                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Adjust2 * ui32Load / 1000);
                      ROM_SysCtlDelay (5000000);
                  }

           BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
           while (g_vui8DataFlag = 0)
           {

           }


           G_vui8DataFlag = 0;

           while (!g_bMPU9150Done)
              {
              }

           G_bMPU9150Done = false;
           MPU9150DataRead (&sMPU9150、MPU9150Callback、0);
           while (!g_bMPU9150Done)
           {
           }

           MPU9150DataAccelGetFloat (&sMPU9150、&fAccel[0]、&fAccel[1]、&fAccel[2]);


           BMP180DataTemperatureGetFloat (&g_sBMP180Inst、&fTemperature);
           BMP180DataTemperatureGetRaw (&g_sBMP180Inst、&TemperatureRaw);

           i32集成器件 Ax =(int32_t) fAccel[0];
           i32FractionPartAx =(int32_t)(fAccel[0]* 1000.0f);
           i32FractionPartAx = i32FractionPartAx -(i32IntegerPartAx * 1000);
           if (i32FractionPartAx < 0)
           {
               i32FractionPartAx *=-1;
           }

           i32IntegerPartAy =(int32_t) fAccel[1];
           i32FractionPartAy =(int32_t)(fAccel[1]* 1000.0f);
           i32FractionPartAy = i32FractionPartAy -(i32IntegerPartAy * 1000);

           if (i32FractionPartAy < 0)
           {
               i32FractionPartAy *=-1;
           }

           i32IntegerPartAz =(int32_t) fAccel[2];
           i32FractionPartAz =(int32_t)(fAccel[2]* 1000.0f);
           i32FractionPartAz = i32FractionPartAz -(i32IntegerPartAz * 1000);

           if (i32FractionPartAz < 0)
           {
               i32FractionPartAz *=-1;
           }


           UARTprintf ("%3d.%03d"、i32IntegerPartAx、i32FractionPartAx);
           UARTprintf ("、");
           UARTprintf ("%3d.%03d"、i32IntegerPartAy、i32FractionPartAy);
           UARTprintf ("、");
           UARTprintf ("%3d.%03d"、i32IntegerPartAz、i32FractionPartAz);


           MPU9150DataMagnetoGetRaw (&sMPU9150、&fMagneto[0]、&fMagneto[1]、&fMagneto[2]);


           i32IntegerPart =(int32_t) fMagnete[0];
           i32FractionPart =(Int32_t)(fMagnete[0]* 1000.0f);
           i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
           if (i32FractionPart < 0)
           {
               i32FractionPart *=-1;
           }


           fAltitude = 44330.0f *(1.0f - powf (fPressure / 101325.0f、
                                               1.0f / 5.255f);


           i32 IntegerPart =(int32_t) fAltitude;
           i32FractionPart =(int32_t)(fAltitude * 1000.0f);
           i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
           if (i32FractionPart < 0)
           {
               i32FractionPart *=-1;
           }


           UARTprintf ("\n");

           ROM_SysCtlDelay (ROM_SysCtlClockGet ()/(10 * 3));

       }
    }e2e.ti.com/.../sensor_5F00_hub_5F00_testing.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我忘记了,你可以用50到120来控制伺服”,“在每组数字中,一个例子是:120,120,120,或者70,50,100,或者110,80,90,等等
    祝你度过美好的一天!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴您更新了论坛-但没有一行(非常)长代码-获得了评论的"好处"!

    因此、对于这里的人来说、"哪个代码块"仍然"不清楚"、而且您也可能这样做、因为"哪个代码块"是针对伺服系统的!

    已经"沉浸"在这个项目中-您"现在知道"的是随着时间的推移"一定要变暗"-那是什么?   注释提供了出色的"道路标志"(如街道标志)、可帮助我们导航-城市街道和高度相似的代码块-最好确保我们"找到路线"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我对我从原始代码(TIVaWare 中的无线鼠标示例)中所说的内容表示满意、代码和项目如下所示:

     


    #include
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_ints.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include "sensorlib/hw_bmp180.h"
    #include "sensorlib/i2cm_drv.h"
    #include "sensorlib/bmp180.h"
    #include "drivers/rgb.h"
    #include "sensorlib/ak8975.h"
    #include "sensorlib/mpu9150.h"
    #include "sensorlib/mpu6050.h"
    #include "sensorlib/hw_mpu9150.h"
    #include
    #include
    #include
    #include
    #include
    #include


    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_hibernate.h"
    #include "driverlib/fpu.h"
    #include "driverlib/gpio.h"
    #include "driverlib/hibernate.h"
    #include "driverlib/interrupt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/rom.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/SysTick .h"
    #include "driverlib/uart.h"
    #include "utils/uartstdio.h"
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/debug.h"
    #include "driverlib/pwm.h"
    #include "driverlib/pin_map.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/rom.h"
    #define PWM_FREQUENCY 55

    #define BMP180_I2C_ADDRESS     0x77

    #define MPU9150_I2C_ADDRESS    0X68


    #define LED_PERIPh SYSCTL_PERIPH_GPIOF
    #define LED_base GPIO_PORTF_BASE
    #define RED_LED GPIO_PIN_1

    uint32_t g_pui32Colors[3];


    tI2CMInstance g_sI2CInst;


    tBMP180 g_sBMP180Inst;

    tMPU9150 sMPU9150;

    volatile uint_fast8_t g_vui8DataFlag;


    volatile bool g_bMPU9150Done;


    #ifdef 调试
    无效
    _error__(char * pcFilename、uint32_t ui32Line)


    #endif

    int32_t functie (int32_t n)

       int32_t rez;
       REZ = 2*n;
       返回(雷兹);


    void comenzi (char * str、float * COM1、float * com2、float * com3)


       浮点温度[5];
       char buffer[16];
       char com[7];
       int32_t i、j、k、p;
       int32_t n、ns、nf;

       i=0;j=0;k=0;p=0;
       N=0;ns=0;nf=0;

       strcpy (buffer、str);
       N=strlen (缓冲区);

       for (i=0;<n; i++))
       {
           if (buffer[i]='、')
           {
               NF = I;
               对于(j=ns;<nf;j++)
               {
                   com[p]=缓冲器[j];
                   P++;
               }
               com[p]='\0';
               temp[k]= atof (com);
                   P  = 0;
                   com[p]='\0';
                   K++;
                   Ns = I+1;
           }
       }

       *COM1 =temp[0];
       * com2 =temp[1];
       * COM3 =temp[2];

    void BMP180AppCallback (void* pvCallbackData、uint_fast8_t ui8Status)

       if (ui8Status = I2CM_STATUS_SUCCESS)
       {
           G_vui8DataFlag = 1;
       }


    void MPU9150Callback (void * pvCallbackData、uint_fast8_t ui8Status)

       if (ui8Status!= I2CM_STATUS_SUCCESS)
       {

       }

       G_bMPU9150Done = true;

    无效
    BMP180I2CIntHandler (空)

       I2CMIntHandler (&g_sI2CInst);

    无效
    MPU9150I2CIntHandler (空)

       I2CMIntHandler (&g_sI2CInst);


    无效
    SysTickIntHandler()

       BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);


    /*void
    配置 UART (空)

       //
       //启用 UART 使用的 GPIO 外设。
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

       //
       //启用 UART1
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);

       //
       //为 UART 模式配置 GPIO 引脚。
       //
       ROM_GPIOPinConfigure (GPIO_PB0_U1RX);
       ROM_GPIOPinConfigure (GPIO_PB1_U1TX);
       ROM_GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

       //
       //使用内部16MHz 振荡器作为 UART 时钟源。
       //
       UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);

       //
       //初始化控制台 I/O 的 UART
       //
       //UARTStdioConfig (0、115200、16000000);
       UARTStdioConfig (1、9600、16000000);
    }*/
    无效
    配置 UART (空)

       //
       //启用 UART 使用的 GPIO 外设。
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

       //
       //启用 UART0
       //
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

       //
       //为 UART 模式配置 GPIO 引脚。
       //
       ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
       ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
       ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

       //
       //使用内部16MHz 振荡器作为 UART 时钟源。
       //
       UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);


       UARTStdioConfig (0、9600、16000000);


    内部
    main (空)

    PWM 的//变量
       volatile uint32_t ui32Load;
            volatile uint32_t ui32PWMClock;
            volatile uint8_t ui8Adc公正、ui8Adjust1、ui8Adjust2;
            ui8Adsit= 83;


            SysCtlPeripheralEnable (LED_Periph);//PF1、PF2、PF2引脚也被 RGB LED 使用、此函数启用它们
            SysCtlDelay(3);

    // Sensorhub 传感器的变量(我们使用的是 mpu9150)
       fTemperature、fPressure、fAltitude;
       int32_t i32IntegerPart、i32IntegerPartAx、i32IntegerPartAy、i32IntegerPartAz;
       int32_t i32FractionPart、i32FractionPartAx、i32FractionPartAy、i32FractionPartAz;
       UINT_fast16_t TemperatureRaw;
       fAccel[3]、fGyro[3];
       uint_fast16_t fMagnete[3];

       ROM_SysCtlClockSet (SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz |
                          SYSCTL_OSC_MAIN);
       ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_64);


       ConfigureUART();


       UARTprintf ("\033[2JBMP180示例\n");


       G_pui32Colors[红色]= 0x8000;
       G_pui32Colors[蓝色]= 0x8000;
       G_pui32Colors[绿色]= 0x8000;

    //sensorhub mpu9150的 i2c 配置

       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C3);
       ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

       ROM_GPIOPinConfigure (GPIO_PD0_I2C3SCL);
       ROM_GPIOPinConfigure (GPIO_PD1_I2C3SDA);

       GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0);
       ROM_GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1);


    //引脚 PF1、PF2、PF3上三个伺服的 PWM 配置

             SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

              GPIOPinConfigure (GPIO_PF1_M1PWM5);
              GPIOPinConfigure (GPIO_PF2_M1PWM6);
              GPIOPinConfigure (GPIO_PF3_M1PWM7);
              GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
              PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
              PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);


              ui32PWMClock = SysCtlClockGet ()/64;
              ui32Load =(ui32PWMClock/PWM_FREQUENCY)- 1;

              PWMGenConfigure (PWM1_base、PWM_GEN_0、PWM_GEN_MODE_DOWN);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32Load);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_2、ui32Load);
              PWMGenPeriodSet (PWM1_base、PWM_GEN_3、ui32Load);


              PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Ad正义* ui32Load / 1000);
              PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Ad正义* ui32Load / 1000);
              PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Ad正义* ui32Load / 1000);

              PWMGenEnable (PWM1_base、PWM_GEN_2);
              PWMGenEnable (PWM1_base、PWM_GEN_3);
              PWMOutputState (PWM1_base、PWM_OUT_5_BIT | PWM_OUT_6_BIT | PWM_OUT_7_BIT、true);

    //这来自 sensorHub 示例中的"无线鼠标"
       ROM_IntMasterEnable();


       I2CMInit (&g_sI2CInst、I2C3_base、INT_I2C3、0xff、0xff、
                ROM_SysCtlClockGet ();


       BMP180Init (&g_sBMP180Inst、&g_sI2CInst、BMP180_I2C_address、
                  BMP180AppCallback、&g_sBMP180Inst);

       while (g_vui8DataFlag = 0)
       {

       }


       G_vui8DataFlag = 0;

       G_bMPU9150Done == false;

       MPU9150Init (&sMPU9150、&g_sI2CInst、MPU9150_I2C_address、MPU9150Callback、0);
       while (!g_bMPU9150Done)
       {

       }

       G_bMPU9150Done = false;

       MPU9150ReadModifyWrite (&sMPU9150、MPU9150_O_ACCEL_CONFIG、
       ~MPU9150_ACCEL_CONFIG_AFS_SEL_M、
       MPU9150_ACCEL_CONFIG_AFS_SEL_4G、MPU9150Callback、
       0);


       ROM_SysTickPeriodSet (ROM_SysCtlClockGet ()/(10 * 3));//设置时钟的延迟
       ROM_SysTickIntEnable();
       ROM_SysTickEnable();

                char g_cInput[16];//我们在控制台中存储键入内容的数组
                   浮动 D1、D2、D3;//变量、我们使用它们来存储每个伺服的 PWM 控制

                   ROM_FPUEnable();
                   ROM_FPUStackingEnable();

            UARTprintf ("test");
       while (1)
       {


           if (UARTPeek ('\r')!=1)//检查 UART 控制台中是否键入了任何内容(mine 是 UART0)
                  {


                      UARTgets (g_cInput、sizeof (g_cInput));//获取在 UART 中键入的内容
                      UARTprintf ("CE s-a printtat:%s\n"、g_cInput);//打印我键入的内容
                      comenzi (g_cInput、&D1、&D2、&D3);//comenzi 函数从 UART 获取 char 并将数字分隔为"、"字符
                      UARTprintf ("%d、%d、%d\n"、(int32_t) D1、(int32_t) D2、(int32_t) D3);//打印控制伺服的数字
                      //3个将获得数字命令的变量(从50到120)
                      ui8Adcust =(int32_t) d1;
                      ui8Adjust1 =(Int32_t) D2;
                      ui8Adjust2 =(Int32_t) D3;


                      //此处是我们与三个伺服系统进行通信的位置
                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_5、ui8Adust * ui32Load / 1000);
                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_6、ui8Adjust1 * ui32Load / 1000);
                      ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_7、ui8Adjust2 * ui32Load / 1000);
                      ROM_SysCtlDelay (5000000);
                      //以及0、5秒的小延迟、让伺服进行移动}
                  }
    //此处显示的是 TivaWare sensorhub "air mouse"的示例


           BMP180DataRead (&g_sBMP180Inst、BMP180AppCallback、&g_sBMP180Inst);
           while (g_vui8DataFlag = 0)
           {

           }


           G_vui8DataFlag = 0;

           while (!g_bMPU9150Done)
              {
              }

           G_bMPU9150Done = false;
           MPU9150DataRead (&sMPU9150、MPU9150Callback、0);
           while (!g_bMPU9150Done)
           {
           }

           MPU9150DataAccelGetFloat (&sMPU9150、&fAccel[0]、&fAccel[1]、&fAccel[2]);


           BMP180DataTemperatureGetFloat (&g_sBMP180Inst、&fTemperature);
           BMP180DataTemperatureGetRaw (&g_sBMP180Inst、&TemperatureRaw);

           i32集成器件 Ax =(int32_t) fAccel[0];
           i32FractionPartAx =(int32_t)(fAccel[0]* 1000.0f);
           i32FractionPartAx = i32FractionPartAx -(i32IntegerPartAx * 1000);
           if (i32FractionPartAx < 0)
           {
               i32FractionPartAx *=-1;
           }

           i32IntegerPartAy =(int32_t) fAccel[1];
           i32FractionPartAy =(int32_t)(fAccel[1]* 1000.0f);
           i32FractionPartAy = i32FractionPartAy -(i32IntegerPartAy * 1000);

           if (i32FractionPartAy < 0)
           {
               i32FractionPartAy *=-1;
           }

           i32IntegerPartAz =(int32_t) fAccel[2];
           i32FractionPartAz =(int32_t)(fAccel[2]* 1000.0f);
           i32FractionPartAz = i32FractionPartAz -(i32IntegerPartAz * 1000);

           if (i32FractionPartAz < 0)
           {
               i32FractionPartAz *=-1;
           }


           UARTprintf ("%3d.%03d"、i32IntegerPartAx、i32FractionPartAx);
           UARTprintf ("、");
           UARTprintf ("%3d.%03d"、i32IntegerPartAy、i32FractionPartAy);
           UARTprintf ("、");
           UARTprintf ("%3d.%03d"、i32IntegerPartAz、i32FractionPartAz);


           MPU9150DataMagnetoGetRaw (&sMPU9150、&fMagneto[0]、&fMagneto[1]、&fMagneto[2]);


           i32IntegerPart =(int32_t) fMagnete[0];
           i32FractionPart =(Int32_t)(fMagnete[0]* 1000.0f);
           i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
           if (i32FractionPart < 0)
           {
               i32FractionPart *=-1;
           }


           fAltitude = 44330.0f *(1.0f - powf (fPressure / 101325.0f、
                                               1.0f / 5.255f);


           i32 IntegerPart =(int32_t) fAltitude;
           i32FractionPart =(int32_t)(fAltitude * 1000.0f);
           i32FractionPart = i32FractionPart -(i32IntegerPart * 1000);
           if (i32FractionPart < 0)
           {
               i32FractionPart *=-1;
           }


           UARTprintf ("\n");

           ROM_SysCtlDelay (ROM_SysCtlClockGet ()/(10 * 3));

       }

    e2e.ti.com/.../8357.sensor_5F00_hub_5F00_testing.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您当然可以"免费"使用/避免评论。   通过的评论方法"通过了时间的检验"是"不是我的发明",并且得到了普遍的承认和支持。

    有些人可能对伺服的"50-120值限制"很好奇。    您能否解释一下如何选择这些值、然后进行测试/验证?   (即 、显示给 PWM 脉宽功能的值或者它是"代表"伺服的角度跨度"。 还是其他东西?

    感谢您付出的时间和努力-可能您已经帮助过他人-这总是很好的!    祝您有机会、我是 AMI……

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经看到这些是使伺服从0到180 *的最大和最小值,我还没有找到一个可以映射的函数。
    我尝试自己创建一个函数、将[50、120]转换为[0、180]:
    空映射(float *num){
    *num=(*num *0.3888)+50;

    但它向我显示一个错误:"无效类型转换"当我尝试使用它时:ui8Adcust =(int32_t)(映射(&D1));
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为什么您需要"浮点"的"精度"(和复杂性)?

    还有-仍未回答-介绍哪个函数是(50到120)假定的范围? 这种详细情况(进一步)证明了对有用的"评论"的要求-(有时甚至是"逐行")
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、有几个问题。

    您尚未学习使用粘贴代码。 这使得读者不必要地难以遵守您的代码。 除其他故障外、缩进会丢失。

    [引用 user="Beatrice Balaceanu"]void mapping (float *num){
    *num=(*num *0.3888)+50;

    但它向我显示一个错误:"无效类型转换"当我尝试使用它时:ui8Adcust =(int32_t)(映射(&D1));

    问题:

    • 什么是 D1? 这不是视图中的任何位置。
    • 为什么要通过指针返回? 这会增加不需要的错误可能性。
    • CB1问、为什么要使用浮点?

    Robert

    BTW 是 这样一个极好的机会、即像 PC-Lint 这样的静态分析器已经向您详细介绍了错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robert、

    我也看到了(不明智的指针使用)-但"浮动使用"-超过了如此有限的信号范围(永远不会从这种情况中受益)要求地址。

    至于"D1"-就在那里-但代码中隐藏的 lurks (非常好)。

    下面只是"一个这样的捕获"-当我的眼睛"横穿"(如果他们做过的话)并且仍然需要-可以提供更多的东西。

    ROM_PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、ui8Adust * ui32Load / 1000);
    ROM_PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE);
    ROM_PWMGenEnable (PWM0_BASE、PWM_GEN_0);
    char g_cInput[16];
    浮动 D1、D2;

    ROM_FPUEnable();
    ROM_FPUStackingEnable();
    UARTprintf ("test");
    while (1)



    if (UARTPeek ('\r')!=1)

    ///

    ///

    UARTgets (g_cInput、sizeof (g_cInput));
    UARTprintf ("CE s-a printtat:%s\n"、g_cInput);
    Comenzi (g_cInput、&D1、&D2);
    UARTprintf ("%d、%d\n"、(int32_t) D1、(int32_t) D2);

    深蹲打开-如果需要更多图示...   这个项目违反了 kiss -创作者本该怎么想?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 CB1

    除非代码相当短、否则如果未使用粘贴代码、我很少尝试对其进行解密。 这有助于并导致下一个观察结果

    [引用用户="Beatrice Balaceanu"]

    空映射(float *num)   [/quot]

    [引用用户="Beatrice Balaceanu"]

    (int32_t)(映射(&D1));   [/引用]

    Beatrice、您是否看到两个引用片段之间的返回结果存在矛盾?

    这更强调了我关于使用指针的问题。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很好的获取和说明、Robert。 (正如我们期待的那样)

    我注意到、"Lenscrafters/others"是"夹紧您的冷冻耳轴"-当您穿过(两者)雪和多余/不受约束的代码时...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这就是我在匆忙中尝试创建的东西、将[50、120]个伺服限制映射为[0、180]。 您能否告诉我在 code composer 中是否有用于映射的函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们都不使用 CCS、

    虽然它可能具有这样的函数、但如果有、我会有点惊讶。 而不是很难写入(即使是整数)。

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我有另一个问题、当我尝试使用 UART0打印消息时、我尝试使用 XBee 在我的接收器代码上从一个 Tiva 获取一些文本、而 UART1连接在 XBee 上、它工作正常。 但是当我将 UART1更改为 UART5时,它不会显示任何内容。
    UART5配置是否有问题?

    无效
    配置 UART0 (空)

    //
    //启用 UART 使用的 GPIO 外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

    //
    //启用 UART0
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

    //
    //为 UART 模式配置 GPIO 引脚。
    //
    ROM_GPIOPinConfigure (GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure (GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

    //
    //使用内部16MHz 振荡器作为 UART 时钟源。
    //
    UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);

    //
    //初始化控制台 I/O 的 UART
    //
    UARTStdioConfig (0、9600、16000000);

    无效
    配置 UART5 (空)

    //
    //启用 UART 使用的 GPIO 外设。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

    //
    //启用 UART5
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART5);

    //
    //为 UART 模式配置 GPIO 引脚。
    //
    ROM_GPIOPinConfigure (GPIO_PE4_U5RX);
    ROM_GPIOPinConfigure (GPIO_PE5_U5TX);
    ROM_GPIOPinTypeUART (GPIO_Porte _BASE、GPIO_PIN_4 | GPIO_PIN_5);

    //
    //使用内部16MHz 振荡器作为 UART 时钟源。
    //
    UARTClockSourceSet (UART5_BASE、UART_CLOCK_PIOSC);

    //
    //初始化控制台 I/O 的 UART

    UARTStdioConfig (5、9600、16000000);




    内部
    main (空)





    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    ROM_SysCtlDelay (1);

    ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_1);
    配置 UART0();
    配置 UART5();


    while (1)


    ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_1、GPIO_PIN_1);

    ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_1、0);

    IF (UARTCharsAvail (UART5_BASE)) UARTCharPut (UART0_BASE、UARTCharGet (UART5_BASE));





    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能会注意到、"stdio 函数"可能不会扩展为"UART5"。 (便于您查看...)
    请注意、这种"线程目标的转变"使论坛员工"谢谢"(或 krazier)-首选新线程...