资源简介
基于stm32 的USB 鼠标 键盘复合设备实例,已验证,编译通过。

代码片段和文件信息
#include “flash.h“
u16 STMFLASH_BUF[STM_SECTOR_SIZE/2];//最多是2K字节
u16 STMFLASH_ReadHalfWord(u32 faddr)
{
return *(vu16*)faddr;
}
void STMFLASH_Write_NoCheck(u32 WriteAddru16 *pBufferu16 NumToWrite)
{
u16 i;
for(i=0;i {
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORDWriteAddrpBuffer[i]);
WriteAddr+=2;//地址增加2.
}
}
void STMFLASH_Write(u32 WriteAddru16 *pBufferu16 NumToWrite)
{
FLASH_EraseInitTypeDef FlashEraseInit;
HAL_StatusTypeDef FlashStatus=HAL_OK;
u32 PageError=0;
u32 secpos; //扇区地址
u16 secoff; //扇区内偏移地址(16位字计算)
u16 secremain; //扇区内剩余地址(16位字计算)
u16 i;
u32 offaddr; //去掉0X08000000后的地址
if(WriteAddrse||(WriteAddr>=(STM32_FLASH_base+1024*STM32_FLASH_SIZE)))return;//非法地址
HAL_FLASH_Unlock(); //解锁
offaddr=WriteAddr-STM32_FLASH_base; //实际偏移地址.
secpos=offaddr/STM_SECTOR_SIZE; //扇区地址 0~127 for STM32F103RBT6
secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)
secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小
if(NumToWrite<=secremain)secremain=NumToWrite;//不大于该扇区范围
while(1)
{
STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_baseSTMFLASH_BUFSTM_SECTOR_SIZE/2);//读出整个扇区的内容
for(i=0;i {
if(STMFLASH_BUF[secoff+i]!=0XFFFF)break;//需要擦除
}
if(i {
FlashEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
FlashEraseInit.Banks = FLASH_BANK_1;
FlashEraseInit.PageAddress = secpos*STM_SECTOR_SIZE+STM32_FLASH_base;
FlashEraseInit.NbPages = 1; //电压范围,VCC=2.7~3.6V之间!!
HAL_FLASHEx_Erase(&FlashEraseInit&PageError);
FlashStatus=FLASH_WaitForLastOperation(FLASH_WAITETIME);
for(i=0;i {
STMFLASH_BUF[i+secoff]=pBuffer[i];
}
STMFLASH_Write_NoCheck(secpos*STM_SECTOR_SIZE+STM32_FLASH_baseSTMFLASH_BUFSTM_SECTOR_SIZE/2);//写入整个扇区
}else STMFLASH_Write_NoCheck(WriteAddrpBuffersecremain);//写已经擦除了的直接写入扇区剩余区间.
if(NumToWrite==secremain)break;//写入结束了
else//写入未结束
{
secpos++; //扇区地址增1
secoff=0; //偏移位置为0
pBuffer+=secremain; //指针偏移
WriteAddr+=secremain*2; //写地址偏移
NumToWrite-=secremain; //字节(16位)数递减
if(NumToWrite>(STM_SECTOR_SIZE/2))secremain=STM_SECTOR_SIZE/2;//下一个扇区还是写不完
else secremain=NumToWrite;//下一个扇区可以写完了
}
};
HAL_FLASH_Lock(); //上锁
}
//从指定地址开始读出指定长度的数据
//ReadAddr:起始地址
//pBuffer:数据指针
//NumToRead:字(32位)数
void STMFLASH_Read(u32 ReadAddru16 *pBufferu16 NumToRead)
{
u16 i;
for(i=0;i {
pBuffer[i]=STMFLASH_ReadHalfWord(ReadAddr);//读取2个字节.
ReadAddr+=2;//偏移2个字节.
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-08-15 11:31 USB_Composite\
目录 0 2017-08-15 15:36 USB_Composite\APP\
文件 2944 2017-08-10 11:08 USB_Composite\APP\flash.c
文件 711 2017-08-10 10:41 USB_Composite\APP\flash.h
文件 2838 2017-08-11 13:03 USB_Composite\APP\KEY.c
文件 1381 2017-08-11 13:03 USB_Composite\APP\KEY.h
文件 386 2017-08-09 14:56 USB_Composite\APP\led.c
文件 262 2017-08-09 15:02 USB_Composite\APP\led.h
文件 2210 2017-08-15 15:36 USB_Composite\APP\timer.c
文件 217 2017-08-01 14:45 USB_Composite\APP\timer.h
目录 0 2017-08-15 11:31 USB_Composite\CORE\
文件 24423 2015-10-30 17:22 USB_Composite\CORE\cmsis_armcc.h
文件 103909 2015-10-30 17:22 USB_Composite\CORE\core_cm3.h
文件 3620 2015-10-30 17:22 USB_Composite\CORE\core_cmFunc.h
文件 3636 2015-10-30 17:22 USB_Composite\CORE\core_cmInstr.h
文件 3662 2015-10-30 17:22 USB_Composite\CORE\core_cmSimd.h
文件 16358 2016-04-25 17:17 USB_Composite\CORE\startup_stm32f103xe.s
目录 0 2017-08-15 11:31 USB_Composite\HALLIB\
目录 0 2017-08-15 11:31 USB_Composite\HALLIB\Inc\
目录 0 2017-08-15 11:31 USB_Composite\HALLIB\Inc\Legacy\
文件 176630 2016-04-25 22:54 USB_Composite\HALLIB\Inc\Legacy\stm32_hal_legacy.h
文件 11612 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal.h
文件 52075 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_adc.h
文件 48934 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_adc_ex.h
文件 38445 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_can.h
文件 6955 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_can_ex.h
文件 16212 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_cec.h
文件 14651 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_conf_template.h
文件 19962 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_cortex.h
文件 6154 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_crc.h
文件 10771 2016-04-25 22:43 USB_Composite\HALLIB\Inc\stm32f1xx_hal_dac.h
............此处省略158个文件信息
相关资源
- usb hid调试工具
- HID调试助手
- USB.Over.Network.Server 注册机
- WPF USB 网络 串口 通信软件
- USB转串口驱动,FT232R驱动程序,最新
- WinCE下CP210x的驱动程序
- hidusage.h hidpi.h 等USB开发用头文件
- 基于JM20329的SATA转USB 1394
- 430系列单片机USBFET下载驱动
- CY7C68013A固件程序(用于摄像机采集)
- usb调试程序 对USB设备进行数据的读写
- USB 驱动 让电脑与arm进行通信
- USB助手(调试USB通信协议的工具) 源
- 基于FPGA的USB接口设计
- 枚举USB设备接口(C 源代码)
- 多普达USB Modem驱动(适用于818、828、
- SN9C291B datasheet
- 希捷公布USB外部硬盘解决方案
- USB调试模式一键设置
- USB网卡驱动 USB2.0 TO Fast Ethernet Adapte
- USB转串口(RS232/RS485/RS422)驱动程序文
- USB Type-C SPEC
- H310.B360.H370.Z390.USB WIN7 64位第三方驱动
- 300系列WIN7 USB驱动.7z
- 华硕P8H61/USB3 R2.0主板BIOS驱动 免费版
- RTL8188EVT USB WIFI无线网卡驱动 免费版
- RTL8188 USB无线网卡模块完整方案
- USB PCB布局布线要点及注意事项
- USB驱动 INF中的服务安装段落无效的原
- MTP USB驱动win7 32+64位可用版
评论
共有 条评论