资源简介
基于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个文件信息
相关资源
- VL822主控方案 USB HUB 原理图
- Usb设备插拔检测 通过检测Usb设备PID和
- USB HUB usb分线器 电路原理图
- usb3.0_fpga_ddr2原理图
- usbisp ii WIN7/8线驱动-双龙JUNGO-Atmel-
- kxlrw40an.exe
- SATA转USB方案,原理图(Cadence工程文件
- ft232r usb uart 驱动
- AVRUSB单片机编程与上位机编程教程重
- tiny4412 + qtopia + v4l2 + usb camera
- USB_CDC协议
- USB摄像头原理图电路图
- 基于Ubuntu15系统的tiny4412使用dnw烧录裸
- FX PLC USB-SC09 驱动 CH340/CH341USB转串口
- CH340驱动(USB串口驱动)_XP_WIN7-win10全
- usb 方口直插原理图库和pcb封装库
- Opencv打开电脑自带USB摄像头并调用模
- HID读写
- 银灿IS917U盘PCB电路原理图+PCB图
- HT42B534 USB转串口驱动
- 禁用 启用U盘,不影响USB鼠标键盘 注
- 基于LABVIEW 的STM32USB数据采集
- 有数字认证的winusb.sys
- usb 最全封装库含micro usbfor altium
- USB转串口驱动源代码及单片机程序
- Memtest86+ 5.01USB Installer
- usb hid 数据读取
- openwrt多个打印机luci
- 炜煌打印机USB驱动For Win7
- USB线转RS232串口驱动
评论
共有 条评论