ARM_STM32f303开发笔记(一)

ARM_STM32f303开发笔记

2013.4.10

固件库stm32f3discovery_fw.zip的使用,将其解压,有三个相关联的文件夹:LibrariesProjectUtilities,这三个文件夹不能分开,路径必须和解压时的一样,因为所有的项目都有固定的依赖关系。

关于Keil的安装,杜学长的《stm32f303discovery的使用》说的很清楚了,而且还给了一个开发实例。

我按照了其步骤,下载了一个USB_Example的项目,并且成功地运行了。打开项目USB_Example.uvproj,然后进入Flash->Configure Flash tools...具体设置都在杜学长的文章有详细介绍。值得注意的是给stm32f303烧写代码时,USB接口为USB ST-LINK接口,USB_Example的主要功能是通过对开发板的移动对光标进行控制,但是烧写完后必须改变开发板上的USB接口,接USB USER口,否则不能通过开发板对光标进行控制。

既然stm32f303能对鼠标进行控制,那么它应该也能驱动摄像头,或者接收摄像头传来的数据,只要它们符合一定的USB协议。

2013.4.12

开发STM32F3-Discovery的四种工具:

Altium: TASKINGVX-Toolset

Atollic: TrueSTUDIO

IAR: EWARM

Keil: MDK-ARM

Discovery的固件包中都提供了四种工具的工程文件,而我采用的是Keil

USB-Example分析:

1、入口函数main()

1)先初始化时钟,得到各个模块的时钟频率:

RCC_GetClocksFreq(&RCC_Clocks);//get clocks freq

SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);

(2)配置USB,主要是设置系统时钟、USB时钟、USB中断配置、USB初始化(获取USB的一些设备ID号等):

USB_Config();

(3)加速器(Accelerometer)的配置,作用是Configure the Mems to Accelerometer MEMS,应该是关于微电子陀螺仪(MEMS)的一些配置。

Acc_Config();

(4)进入死循环,MGMEMS Gyroscopy)控制光标。

while (1)

  {      

    /* Wait for data ready */

    while(DataReady !=0x04)

    {}

    DataReady = 0x00;

    

    /* Get Data Accelerometer */

    Acc_ReadData(AccBuffer);

    

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

      AccBuffer[i] /= 100.0f;

    

    /* Get position */

    Mouse_Buffer = USBD_HID_GetPos();

    /* Update the cursor position */

    if((Mouse_Buffer[1] != 0) ||(Mouse_Buffer[2] != 0))

    {

      /* Reset the control token to inform upper layer that a transfer is ongoing */

      PrevXferComplete = 0;

      

      /* Copy mouse position info in ENDP1 Tx Packet Memory Area*/

      USB_SIL_Write(EP1_IN, Mouse_Buffer, 4);

      

      /* Enable endpoint for transmission */

      SetEPTxValid(ENDP1);

    }

  }

水平放正MG,当MG向左倾斜时,光标向左移动,光标移动的最小长度是20个像素点,同理,MG向前后左右倾斜,光标均有相应的移动。精度还算比较高。

你可能感兴趣的:(嵌入式开发)