• 大小: 834KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: USB  复合设备  

资源简介

基于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个文件信息

评论

共有 条评论