ARM_STM32f303开发笔记
2013.4.10
固件库stm32f3discovery_fw.zip的使用,将其解压,有三个相关联的文件夹:Libraries、Project、Utilities,这三个文件夹不能分开,路径必须和解压时的一样,因为所有的项目都有固定的依赖关系。
关于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)进入死循环,MG(MEMS 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向前后左右倾斜,光标均有相应的移动。精度还算比较高。