├── code ├── CORE │ ├── core_cm3.c │ ├── core_cm3.h │ ├── startup_stm32f10x_hd.s │ └── startup_stm32f10x_md.s ├── FATFS │ ├── doc │ │ ├── css_e.css │ │ ├── css_j.css │ │ ├── img │ │ │ ├── f1.png │ │ │ ├── f2.png │ │ │ ├── f3.png │ │ │ ├── f4.png │ │ │ ├── f5.png │ │ │ ├── f6.png │ │ │ ├── layers.png │ │ │ ├── layers3.png │ │ │ ├── rwtest.png │ │ │ ├── rwtest2.png │ │ │ └── rwtest3.png │ │ └── updates.txt │ ├── exfuns │ │ ├── exfuns.c │ │ ├── exfuns.h │ │ ├── fattester.c │ │ ├── fattester.h │ │ └── mycc936.c │ ├── fattester.c │ ├── fattester.h │ └── src │ │ ├── 00readme.txt │ │ ├── diskio.c │ │ ├── diskio.h │ │ ├── ff.c │ │ ├── ff.h │ │ ├── ffconf.h │ │ ├── integer.h │ │ └── option │ │ ├── cc932.c │ │ ├── cc936.c │ │ ├── cc949.c │ │ ├── cc950.c │ │ ├── ccsbcs.c │ │ ├── mycc936.c │ │ └── syscall.c ├── HARDWARE │ ├── FLASH │ │ ├── flash.c │ │ └── flash.h │ ├── ITEMP │ │ ├── tsensor.c │ │ └── tsensor.h │ ├── KEY │ │ ├── key.c │ │ └── key.h │ ├── LCD │ │ ├── font.h │ │ ├── lcd.c │ │ └── lcd.h │ ├── LED │ │ ├── led.c │ │ └── led.h │ ├── SD │ │ ├── MMC_SD.C │ │ └── MMC_SD.H │ ├── SPI │ │ ├── spi.c │ │ └── spi.h │ ├── stmflash.c │ └── stmflash.h ├── MALLOC │ ├── malloc.c │ └── malloc.h ├── STM32F10x_FWLib │ ├── inc │ │ ├── misc.h │ │ ├── stm32f10x_adc.h │ │ ├── stm32f10x_bkp.h │ │ ├── stm32f10x_can.h │ │ ├── stm32f10x_cec.h │ │ ├── stm32f10x_crc.h │ │ ├── stm32f10x_dac.h │ │ ├── stm32f10x_dbgmcu.h │ │ ├── stm32f10x_dma.h │ │ ├── stm32f10x_exti.h │ │ ├── stm32f10x_flash.h │ │ ├── stm32f10x_fsmc.h │ │ ├── stm32f10x_gpio.h │ │ ├── stm32f10x_i2c.h │ │ ├── stm32f10x_iwdg.h │ │ ├── stm32f10x_pwr.h │ │ ├── stm32f10x_rcc.h │ │ ├── stm32f10x_rtc.h │ │ ├── stm32f10x_sdio.h │ │ ├── stm32f10x_spi.h │ │ ├── stm32f10x_tim.h │ │ ├── stm32f10x_usart.h │ │ └── stm32f10x_wwdg.h │ └── src │ │ ├── misc.c │ │ ├── stm32f10x_adc.c │ │ ├── stm32f10x_bkp.c │ │ ├── stm32f10x_can.c │ │ ├── stm32f10x_cec.c │ │ ├── stm32f10x_crc.c │ │ ├── stm32f10x_dac.c │ │ ├── stm32f10x_dbgmcu.c │ │ ├── stm32f10x_dma.c │ │ ├── stm32f10x_exti.c │ │ ├── stm32f10x_flash.c │ │ ├── stm32f10x_fsmc.c │ │ ├── stm32f10x_gpio.c │ │ ├── stm32f10x_i2c.c │ │ ├── stm32f10x_iwdg.c │ │ ├── stm32f10x_pwr.c │ │ ├── stm32f10x_rcc.c │ │ ├── stm32f10x_rtc.c │ │ ├── stm32f10x_sdio.c │ │ ├── stm32f10x_spi.c │ │ ├── stm32f10x_tim.c │ │ ├── stm32f10x_usart.c │ │ └── stm32f10x_wwdg.c ├── SYSTEM │ ├── delay │ │ ├── delay.c │ │ └── delay.h │ ├── sys │ │ ├── sys.c │ │ └── sys.h │ └── usart │ │ ├── usart.c │ │ └── usart.h ├── USB │ ├── CONFIG │ │ ├── hw_config.c │ │ ├── hw_config.h │ │ ├── mass_mal.c │ │ ├── mass_mal.h │ │ ├── memory.c │ │ ├── memory.h │ │ ├── msd.c │ │ ├── msd.h │ │ ├── platform_config.h │ │ ├── scsi_data.c │ │ ├── stm32f10x_it.c │ │ ├── stm32f10x_it.h │ │ ├── usb_bot.c │ │ ├── usb_bot.h │ │ ├── usb_conf.h │ │ ├── usb_desc.c │ │ ├── usb_desc.h │ │ ├── usb_endp.c │ │ ├── usb_istr.c │ │ ├── usb_istr.h │ │ ├── usb_prop.c │ │ ├── usb_prop.h │ │ ├── usb_pwr.c │ │ ├── usb_pwr.h │ │ ├── usb_scsi.c │ │ └── usb_scsi.h │ └── LIB │ │ ├── usb_core.c │ │ ├── usb_core.h │ │ ├── usb_def.h │ │ ├── usb_init.c │ │ ├── usb_init.h │ │ ├── usb_int.c │ │ ├── usb_int.h │ │ ├── usb_lib.h │ │ ├── usb_mem.c │ │ ├── usb_mem.h │ │ ├── usb_regs.c │ │ ├── usb_regs.h │ │ └── usb_type.h ├── USER │ ├── API.c │ ├── FAT16.c │ ├── FAT16.h │ ├── JLinkLog.txt │ ├── JLinkSettings.ini │ ├── RTE │ │ └── RTE_Components.h │ ├── UsbCardReader.Uv2.bak │ ├── UsbCardReader.bin │ ├── UsbCardReader.map │ ├── UsbCardReader.opt.bak │ ├── UsbCardReader.uvgui.jerry.yang │ ├── UsbCardReader.uvgui.jerry_yang.bak │ ├── UsbCardReader.uvguix.renjun │ ├── UsbCardReader.uvopt │ ├── UsbCardReader.uvoptx │ ├── UsbCardReader.uvproj.saved_uv4 │ ├── UsbCardReader.uvprojx │ ├── UsbCardReader_Target 1.dep │ ├── UsbCardReader_uvopt.bak │ ├── UsbCardReader_uvproj.bak │ ├── hex.c │ ├── hex.h │ ├── main.c │ ├── main.h │ ├── startup_stm32f10x_hd.lst │ ├── stm32f10x.h │ ├── stm32f10x_conf.h │ ├── stm32f10x_it.c │ ├── stm32f10x_it.h │ ├── system_stm32f10x.c │ └── system_stm32f10x.h └── keilkilll.bat ├── doc └── USB MSD Updater User Manual.pdf └── hex ├── App.hex └── USB MSD Bootloader.hex.zip /code/FATFS/doc/css_e.css: -------------------------------------------------------------------------------- 1 | * {margin: 0; padding: 0; border-width: 0;} 2 | body {margin: 8px; background-color: #e0ffff; font-color: black; font-family: serif; line-height: 133%; max-width: 1024px;} 3 | a:link {color: blue;} 4 | a:visited {color: darkmagenta;} 5 | a:hover {background-color: #a0ffff;} 6 | a:active {color: darkmagenta; overflow: hidden; outline:none; position: relative; top: 1px; left: 1px;} 7 | abbr {border-width: 1px;} 8 | 9 | p {margin: 0 0 0.3em 1em;} 10 | em {font-style: normal; font-weight: bold; margin: 0 0.1em;} 11 | pre em {font-style: italic; font-weight: normal;} 12 | strong {} 13 | pre {border: 1px dashed gray; margin: 0.5em 1em; padding: 0.5em; line-height: 1.2em; font-family: monospace; background-color: white;} 14 | pre span.c {color: green;} 15 | pre span.k {color: blue;} 16 | tt {margin: 0 0.2em; font-family: monospace; } 17 | ol {margin: 0 2.5em;} 18 | ul {margin: 0 2em;} 19 | dl {margin: 0 1em;} 20 | dt {font-family: monospace;} 21 | dl.par dt {margin: 0.5em 0 0 0 ; font-style: italic; } 22 | dl.ret dt {margin: 0.5em 0 0 0 ; font-weight: bold;} 23 | dd {margin: 0 2em;} 24 | hr {border-width: 1px; margin: 1em;} 25 | div.abst {font-family: sans-serif;} 26 | div.para {clear: both; font-family: serif;} 27 | div.ret a {font-family: monospace; } 28 | .equ {text-indent: 0; margin: 1em 2em 1em;} 29 | .indent {margin-left: 2em;} 30 | .rset {float: right; margin: 0 0 0.5em 0.5em;} 31 | .lset {float: left; margin: 0 0.5em 0.5em 0.5em;} 32 | ul.flat li {list-style-type: none; margin: 0;} 33 | a.imglnk img {border: 1px solid;} 34 | .iequ {white-space: nowrap; font-weight: bold;} 35 | .clr {clear: both;} 36 | .it {font-style: italic;} 37 | .mfd {font-size: 0.7em; padding: 0 1px; border: 1px solid; white-space : nowrap} 38 | 39 | h1 {line-height: 1em; font-size: 2em; font-family: sans-serif; padding: 0.3em 0 0.3em;} 40 | p.hdd {float: right; text-align: right; margin-top: 0.5em;} 41 | hr.hds {clear: both; margin-bottom: 1em;} 42 | 43 | h2 {font-size: 1.6em; font-family: sans-serif; background-color: #d8d8FF; padding: 0.2em 0.5em; margin: 0 0 0.5em;} 44 | h3 {font-size: 1.5em; font-family: sans-serif; margin: 1.5em 0 0.5em;} 45 | h4 {font-size: 1.2em; font-family: sans-serif; margin: 1em 0 0.2em;} 46 | h5 {font-size: 1em; font-family: sans-serif; margin: 0.5em 0 0em;} 47 | small {font-size: 80%;} 48 | .indent {margin-left: 2em;} 49 | 50 | /* Tables */ 51 | table {margin: 0.5em 1em; border-collapse: collapse; border: 2px solid black; } 52 | th {background-color: white; border-style: solid; border-width: 1px 1px 2px; border-color: black; padding: 0 3px; vertical-align: top; white-space: nowrap;} 53 | td {background-color: white; border: 1px solid black; padding: 0 3px; vertical-align: top; line-height: 1.3em;} 54 | table.lst td:first-child {font-family: monospace;} 55 | table.lst2 td {font-family: monospace;} 56 | table caption {font-family: sans-serif; font-weight: bold;} 57 | tr.lst3 td { border-width: 2px 1px 1px; } 58 | 59 | p.foot {clear: both; text-indent: 0; margin: 1em 0.5em 1em;} 60 | -------------------------------------------------------------------------------- /code/FATFS/doc/css_j.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/css_j.css -------------------------------------------------------------------------------- /code/FATFS/doc/img/f1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f1.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/f2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f2.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/f3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f3.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/f4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f4.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/f5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f5.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/f6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/f6.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/layers.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/layers3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/layers3.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/rwtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/rwtest.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/rwtest2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/rwtest2.png -------------------------------------------------------------------------------- /code/FATFS/doc/img/rwtest3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/doc/img/rwtest3.png -------------------------------------------------------------------------------- /code/FATFS/doc/updates.txt: -------------------------------------------------------------------------------- 1 | R0.09, Sep 6, 2011 2 | f_mkfs() supports multiple partition to finish the multiple partition feature. 3 | Added f_fdisk(). (_MULTI_PARTITION = 2) 4 | 5 | R0.08b, Jan 15, 2011 6 | Fast seek feature is also applied to f_read() and f_write(). 7 | f_lseek() reports required table size on creating CLMP. 8 | Extended format syntax of f_printf function. 9 | Ignores duplicated directory separators in given path names. 10 | 11 | R0.08a, Aug 16, 2010 12 | Added f_getcwd(). (_FS_RPATH = 2) 13 | Added sector erase feature. (_USE_ERASE) 14 | Moved file lock semaphore table from fs object to the bss. 15 | Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'. 16 | Fixed f_mkfs() creates wrong FAT32 volume. 17 | 18 | R0.08, May 15, 2010 19 | Added a memory configuration option. (_USE_LFN) 20 | Added file lock feature. (_FS_SHARE) 21 | Added fast seek feature. (_USE_FASTSEEK) 22 | Changed some types on the API, XCHAR->TCHAR. 23 | Changed fname member in the FILINFO structure on Unicode cfg. 24 | String functions support UTF-8 encoding files on Unicode cfg. 25 | 26 | R0.07e, Nov 3, 2009 27 | Separated out configuration options from ff.h to ffconf.h. 28 | Added a configuration option, _LFN_UNICODE. 29 | Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. 30 | Fixed name matching error on the 13 char boundary. 31 | Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. 32 | 33 | R0.07c, Jun 21, 2009 34 | Fixed f_unlink() may return FR_OK on error. 35 | Fixed wrong cache control in f_lseek(). 36 | Added relative path feature. 37 | Added f_chdir(). 38 | Added f_chdrive(). 39 | Added proper case conversion to extended characters. 40 | 41 | R0.07a, Apr 14, 2009 42 | Separated out OS dependent code on re-entrant configuration. 43 | Added multiple sector size support. 44 | 45 | R0.07, Apr 01, 2009 46 | Merged Tiny-FatFs into FatFs as a buffer configuration option. 47 | Added long file name support. 48 | Added multiple code page support. 49 | Added re-entrancy for multitask operation. 50 | Added auto cluster size selection to f_mkfs(). 51 | Added rewind option to f_readdir(). 52 | Changed result code of critical errors. 53 | Renamed string functions to avoid name collision. 54 | 55 | R0.06, Apr 01, 2008 56 | Added f_forward. (Tiny-FatFs) 57 | Added string functions: fgets, fputc, fputs and fprintf. 58 | Improved performance of f_lseek on moving to the same or following cluster. 59 | 60 | R0.05a, Feb 03, 2008 61 | Added f_truncate. 62 | Added f_utime. 63 | Fixed off by one error at FAT sub-type determination. 64 | Fixed btr in f_read can be mistruncated. 65 | Fixed cached sector is left not flushed when create and close without write. 66 | 67 | R0.05, Aug 26, 2007 68 | Changed arguments of f_read, f_write. 69 | Changed arguments of f_mkfs. (FatFs) 70 | Fixed f_mkfs on FAT32 creates incorrect FSInfo. (FatFs) 71 | Fixed f_mkdir on FAT32 creates incorrect directory. (FatFs) 72 | 73 | R0.04b, May 05, 2007 74 | Added _USE_NTFLAG option. 75 | Added FSInfo support. 76 | Fixed some problems corresponds to FAT32. (Tiny-FatFs) 77 | Fixed DBCS name can result FR_INVALID_NAME. 78 | Fixed short seek (<= csize) collapses the file object. 79 | 80 | R0.04a, Apr 01, 2007 81 | Supported multiple partitions on a plysical drive. (FatFs) 82 | Added minimization level 3. 83 | Added a capability of extending file size to f_lseek. 84 | Fixed an endian sensitive code in f_mkfs. (FatFs) 85 | Fixed a problem corresponds to FAT32 support. (Tiny-FatFs) 86 | 87 | R0.04, Feb 04, 2007 88 | Supported multiple drive system. (FatFs) 89 | Changed some APIs for multiple drive system. 90 | Added f_mkfs. (FatFs) 91 | Added _USE_FAT32 option. (Tiny-FatFs) 92 | 93 | R0.03a, Dec 11, 2006 94 | Improved cluster scan algolithm to write files fast. 95 | Fixed f_mkdir creates incorrect directory on FAT32. 96 | 97 | R0.03, Sep 22, 2006 98 | Added f_rename. 99 | Changed option _FS_MINIMUM to _FS_MINIMIZE. 100 | 101 | R0.02a, Jun 10, 2006 102 | Added a configuration option _FS_MINIMUM. 103 | 104 | R0.02, Jun 01, 2006 105 | Added FAT12. 106 | Removed unbuffered mode. 107 | Fixed a problem on small (<32M) patition. 108 | 109 | R0.01, Apr 29, 2006 110 | First release 111 | 112 | R0.00, Feb 26, 2006 113 | Prototype (not released) 114 | 115 | -------------------------------------------------------------------------------- /code/FATFS/exfuns/exfuns.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/exfuns/exfuns.c -------------------------------------------------------------------------------- /code/FATFS/exfuns/exfuns.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/exfuns/exfuns.h -------------------------------------------------------------------------------- /code/FATFS/exfuns/fattester.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/exfuns/fattester.c -------------------------------------------------------------------------------- /code/FATFS/exfuns/fattester.h: -------------------------------------------------------------------------------- 1 | #ifndef __FATTESTER_H 2 | #define __FATTESTER_H 3 | #include "ff.h" 4 | #include "sys.h" 5 | 6 | 7 | u8 mf_mount(u8 drv); 8 | u8 mf_open(u8*path,u8 mode); 9 | u8 mf_close(void); 10 | u8 mf_read(u16 len); 11 | u8 mf_write(u8*dat,u16 len); 12 | u8 mf_opendir(u8* path); 13 | u8 mf_readdir(void); 14 | u8 mf_scan_files(u8 * path); 15 | u32 mf_showfree(u8 *drv); 16 | u8 mf_lseek(u32 offset); 17 | u32 mf_tell(void); 18 | u32 mf_size(void); 19 | u8 mf_mkdir(u8*pname); 20 | u8 mf_fmkfs(u8 drv,u8 mode,u16 au); 21 | u8 mf_unlink(u8 *pname); 22 | u8 mf_rename(u8 *oldname,u8* newname); 23 | void mf_gets(u16 size); 24 | u8 mf_putc(u8 c); 25 | u8 mf_puts(u8*c); 26 | 27 | #endif 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /code/FATFS/exfuns/mycc936.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/exfuns/mycc936.c -------------------------------------------------------------------------------- /code/FATFS/fattester.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/fattester.c -------------------------------------------------------------------------------- /code/FATFS/fattester.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/fattester.h -------------------------------------------------------------------------------- /code/FATFS/src/00readme.txt: -------------------------------------------------------------------------------- 1 | FatFs Module Source Files R0.09 (C)ChaN, 2011 2 | 3 | 4 | FILES 5 | 6 | ffconf.h Configuration file for FatFs module. 7 | ff.h Common include file for FatFs and application module. 8 | ff.c FatFs module. 9 | diskio.h Common include file for FatFs and disk I/O module. 10 | integer.h Alternative type definitions for integer variables. 11 | option Optional external functions. 12 | 13 | Low level disk I/O module is not included in this archive because the FatFs 14 | module is only a generic file system layer and not depend on any specific 15 | storage device. You have to provide a low level disk I/O module that written 16 | to control your storage device. 17 | 18 | 19 | 20 | AGREEMENTS 21 | 22 | FatFs module is an open source software to implement FAT file system to 23 | small embedded systems. This is a free software and is opened for education, 24 | research and commercial developments under license policy of following trems. 25 | 26 | Copyright (C) 2011, ChaN, all right reserved. 27 | 28 | * The FatFs module is a free software and there is NO WARRANTY. 29 | * No restriction on use. You can use, modify and redistribute it for 30 | personal, non-profit or commercial product UNDER YOUR RESPONSIBILITY. 31 | * Redistributions of source code must retain the above copyright notice. 32 | 33 | 34 | 35 | REVISION HISTORY 36 | 37 | Feb 26, 2006 R0.00 Prototype 38 | 39 | Apr 29, 2006 R0.01 First release. 40 | 41 | Jun 01, 2006 R0.02 Added FAT12. 42 | Removed unbuffered mode. 43 | Fixed a problem on small (<32M) patition. 44 | 45 | Jun 10, 2006 R0.02a Added a configuration option _FS_MINIMUM. 46 | 47 | Sep 22, 2006 R0.03 Added f_rename. 48 | Changed option _FS_MINIMUM to _FS_MINIMIZE. 49 | 50 | Dec 11, 2006 R0.03a Improved cluster scan algolithm to write files fast. 51 | Fixed f_mkdir creates incorrect directory on FAT32. 52 | 53 | Feb 04, 2007 R0.04 Supported multiple drive system. (FatFs) 54 | Changed some APIs for multiple drive system. 55 | Added f_mkfs. (FatFs) 56 | Added _USE_FAT32 option. (Tiny-FatFs) 57 | 58 | Apr 01, 2007 R0.04a Supported multiple partitions on a plysical drive. (FatFs) 59 | Fixed an endian sensitive code in f_mkfs. (FatFs) 60 | Added a capability of extending the file size to f_lseek. 61 | Added minimization level 3. 62 | Fixed a problem that can collapse a sector when recreate an 63 | existing file in any sub-directory at non FAT32 cfg. (Tiny-FatFs) 64 | 65 | May 05, 2007 R0.04b Added _USE_NTFLAG option. 66 | Added FSInfo support. 67 | Fixed some problems corresponds to FAT32. (Tiny-FatFs) 68 | Fixed DBCS name can result FR_INVALID_NAME. 69 | Fixed short seek (0 < ofs <= csize) collapses the file object. 70 | 71 | Aug 25, 2007 R0.05 Changed arguments of f_read, f_write. 72 | Changed arguments of f_mkfs. (FatFs) 73 | Fixed f_mkfs on FAT32 creates incorrect FSInfo. (FatFs) 74 | Fixed f_mkdir on FAT32 creates incorrect directory. (FatFs) 75 | 76 | Feb 03, 2008 R0.05a Added f_truncate(). 77 | Added f_utime(). 78 | Fixed off by one error at FAT sub-type determination. 79 | Fixed btr in f_read() can be mistruncated. 80 | Fixed cached sector is not flushed when create and close without write. 81 | 82 | Apr 01, 2008 R0.06 Added f_forward(). (Tiny-FatFs) 83 | Added string functions: fputc(), fputs(), fprintf() and fgets(). 84 | Improved performance of f_lseek() on move to the same or following cluster. 85 | 86 | Apr 01, 2009, R0.07 Merged Tiny-FatFs as a buffer configuration option. 87 | Added long file name support. 88 | Added multiple code page support. 89 | Added re-entrancy for multitask operation. 90 | Added auto cluster size selection to f_mkfs(). 91 | Added rewind option to f_readdir(). 92 | Changed result code of critical errors. 93 | Renamed string functions to avoid name collision. 94 | 95 | Apr 14, 2009, R0.07a Separated out OS dependent code on reentrant cfg. 96 | Added multiple sector size support. 97 | 98 | Jun 21, 2009, R0.07c Fixed f_unlink() may return FR_OK on error. 99 | Fixed wrong cache control in f_lseek(). 100 | Added relative path feature. 101 | Added f_chdir(). 102 | Added f_chdrive(). 103 | Added proper case conversion for extended characters. 104 | 105 | Nov 03, 2009 R0.07e Separated out configuration options from ff.h to ffconf.h. 106 | Added a configuration option, _LFN_UNICODE. 107 | Fixed f_unlink() fails to remove a sub-dir on _FS_RPATH. 108 | Fixed name matching error on the 13 char boundary. 109 | Changed f_readdir() to return the SFN with always upper case on non-LFN cfg. 110 | 111 | May 15, 2010, R0.08 Added a memory configuration option. (_USE_LFN) 112 | Added file lock feature. (_FS_SHARE) 113 | Added fast seek feature. (_USE_FASTSEEK) 114 | Changed some types on the API, XCHAR->TCHAR. 115 | Changed fname member in the FILINFO structure on Unicode cfg. 116 | String functions support UTF-8 encoding files on Unicode cfg. 117 | 118 | Aug 16,'10 R0.08a Added f_getcwd(). (_FS_RPATH = 2) 119 | Added sector erase feature. (_USE_ERASE) 120 | Moved file lock semaphore table from fs object to the bss. 121 | Fixed a wrong directory entry is created on non-LFN cfg when the given name contains ';'. 122 | Fixed f_mkfs() creates wrong FAT32 volume. 123 | 124 | Jan 15,'11 R0.08b Fast seek feature is also applied to f_read() and f_write(). 125 | f_lseek() reports required table size on creating CLMP. 126 | Extended format syntax of f_printf function. 127 | Ignores duplicated directory separators in given path names. 128 | 129 | Sep 06,'11 R0.09 f_mkfs() supports multiple partition to finish the multiple partition feature. 130 | Added f_fdisk(). (_MULTI_PARTITION = 2) 131 | -------------------------------------------------------------------------------- /code/FATFS/src/diskio.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/src/diskio.c -------------------------------------------------------------------------------- /code/FATFS/src/diskio.h: -------------------------------------------------------------------------------- 1 | /*----------------------------------------------------------------------- 2 | / Low level disk interface modlue include file 3 | /-----------------------------------------------------------------------*/ 4 | 5 | #ifndef _DISKIO 6 | 7 | #define _READONLY 0 /* 1: Remove write functions */ 8 | #define _USE_IOCTL 1 /* 1: Use disk_ioctl fucntion */ 9 | 10 | #include "integer.h" 11 | 12 | 13 | /* Status of Disk Functions */ 14 | typedef BYTE DSTATUS; 15 | 16 | /* Results of Disk Functions */ 17 | typedef enum { 18 | RES_OK = 0, /* 0: Successful */ 19 | RES_ERROR, /* 1: R/W Error */ 20 | RES_WRPRT, /* 2: Write Protected */ 21 | RES_NOTRDY, /* 3: Not Ready */ 22 | RES_PARERR /* 4: Invalid Parameter */ 23 | } DRESULT; 24 | 25 | 26 | /*---------------------------------------*/ 27 | /* Prototypes for disk control functions */ 28 | 29 | int assign_drives (int, int); 30 | DSTATUS disk_initialize (BYTE); 31 | DSTATUS disk_status (BYTE); 32 | DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE); 33 | #if _READONLY == 0 34 | DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE); 35 | #endif 36 | DRESULT disk_ioctl (BYTE, BYTE, void*); 37 | 38 | 39 | 40 | /* Disk Status Bits (DSTATUS) */ 41 | 42 | #define STA_NOINIT 0x01 /* Drive not initialized */ 43 | #define STA_NODISK 0x02 /* No medium in the drive */ 44 | #define STA_PROTECT 0x04 /* Write protected */ 45 | 46 | 47 | /* Command code for disk_ioctrl fucntion */ 48 | 49 | /* Generic command (defined for FatFs) */ 50 | #define CTRL_SYNC 0 /* Flush disk cache (for write functions) */ 51 | #define GET_SECTOR_COUNT 1 /* Get media size (for only f_mkfs()) */ 52 | #define GET_SECTOR_SIZE 2 /* Get sector size (for multiple sector size (_MAX_SS >= 1024)) */ 53 | #define GET_BLOCK_SIZE 3 /* Get erase block size (for only f_mkfs()) */ 54 | #define CTRL_ERASE_SECTOR 4 /* Force erased a block of sectors (for only _USE_ERASE) */ 55 | 56 | /* Generic command */ 57 | #define CTRL_POWER 5 /* Get/Set power status */ 58 | #define CTRL_LOCK 6 /* Lock/Unlock media removal */ 59 | #define CTRL_EJECT 7 /* Eject media */ 60 | 61 | /* MMC/SDC specific ioctl command */ 62 | #define MMC_GET_TYPE 10 /* Get card type */ 63 | #define MMC_GET_CSD 11 /* Get CSD */ 64 | #define MMC_GET_CID 12 /* Get CID */ 65 | #define MMC_GET_OCR 13 /* Get OCR */ 66 | #define MMC_GET_SDSTAT 14 /* Get SD status */ 67 | 68 | /* ATA/CF specific ioctl command */ 69 | #define ATA_GET_REV 20 /* Get F/W revision */ 70 | #define ATA_GET_MODEL 21 /* Get model name */ 71 | #define ATA_GET_SN 22 /* Get serial number */ 72 | 73 | /* NAND specific ioctl command */ 74 | #define NAND_FORMAT 30 /* Create physical format */ 75 | 76 | 77 | #define _DISKIO 78 | #endif 79 | -------------------------------------------------------------------------------- /code/FATFS/src/integer.h: -------------------------------------------------------------------------------- 1 | /*-------------------------------------------*/ 2 | /* Integer type definitions for FatFs module */ 3 | /*-------------------------------------------*/ 4 | 5 | #ifndef _INTEGER 6 | #define _INTEGER 7 | 8 | #ifdef _WIN32 /* FatFs development platform */ 9 | 10 | #include 11 | #include 12 | 13 | #else /* Embedded platform */ 14 | 15 | /* These types must be 16-bit, 32-bit or larger integer */ 16 | typedef int INT; 17 | typedef unsigned int UINT; 18 | 19 | /* These types must be 8-bit integer */ 20 | typedef char CHAR; 21 | typedef unsigned char UCHAR; 22 | typedef unsigned char BYTE; 23 | 24 | /* These types must be 16-bit integer */ 25 | typedef short SHORT; 26 | typedef unsigned short USHORT; 27 | typedef unsigned short WORD; 28 | typedef unsigned short WCHAR; 29 | 30 | /* These types must be 32-bit integer */ 31 | typedef long LONG; 32 | typedef unsigned long ULONG; 33 | typedef unsigned long DWORD; 34 | 35 | #endif 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /code/FATFS/src/option/mycc936.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/FATFS/src/option/mycc936.c -------------------------------------------------------------------------------- /code/FATFS/src/option/syscall.c: -------------------------------------------------------------------------------- 1 | /*------------------------------------------------------------------------*/ 2 | /* Sample code of OS dependent controls for FatFs R0.08b */ 3 | /* (C)ChaN, 2011 */ 4 | /*------------------------------------------------------------------------*/ 5 | 6 | #include /* ANSI memory controls */ 7 | #include /* ANSI memory controls */ 8 | 9 | #include "../ff.h" 10 | 11 | 12 | #if _FS_REENTRANT 13 | /*------------------------------------------------------------------------*/ 14 | /* Create a Synchronization Object 15 | /*------------------------------------------------------------------------*/ 16 | /* This function is called in f_mount function to create a new 17 | / synchronization object, such as semaphore and mutex. When a zero is 18 | / returned, the f_mount function fails with FR_INT_ERR. 19 | */ 20 | 21 | int ff_cre_syncobj ( /* TRUE:Function succeeded, FALSE:Could not create due to any error */ 22 | BYTE vol, /* Corresponding logical drive being processed */ 23 | _SYNC_t *sobj /* Pointer to return the created sync object */ 24 | ) 25 | { 26 | int ret; 27 | 28 | *sobj = CreateMutex(NULL, FALSE, NULL); /* Win32 */ 29 | ret = (*sobj != INVALID_HANDLE_VALUE); 30 | 31 | // *sobj = SyncObjects[vol]; /* uITRON (give a static sync object) */ 32 | // ret = 1; /* The initial value of the semaphore must be 1. */ 33 | 34 | // *sobj = OSMutexCreate(0, &err); /* uC/OS-II */ 35 | // ret = (err == OS_NO_ERR); 36 | 37 | // *sobj = xSemaphoreCreateMutex(); /* FreeRTOS */ 38 | // ret = (*sobj != NULL); 39 | 40 | return ret; 41 | } 42 | 43 | 44 | 45 | /*------------------------------------------------------------------------*/ 46 | /* Delete a Synchronization Object */ 47 | /*------------------------------------------------------------------------*/ 48 | /* This function is called in f_mount function to delete a synchronization 49 | / object that created with ff_cre_syncobj function. When a zero is 50 | / returned, the f_mount function fails with FR_INT_ERR. 51 | */ 52 | 53 | int ff_del_syncobj ( /* TRUE:Function succeeded, FALSE:Could not delete due to any error */ 54 | _SYNC_t sobj /* Sync object tied to the logical drive to be deleted */ 55 | ) 56 | { 57 | BOOL ret; 58 | 59 | ret = CloseHandle(sobj); /* Win32 */ 60 | 61 | // ret = 1; /* uITRON (nothing to do) */ 62 | 63 | // OSMutexDel(sobj, OS_DEL_ALWAYS, &err); /* uC/OS-II */ 64 | // ret = (err == OS_NO_ERR); 65 | 66 | // ret = 1; /* FreeRTOS (nothing to do) */ 67 | 68 | return ret; 69 | } 70 | 71 | 72 | 73 | /*------------------------------------------------------------------------*/ 74 | /* Request Grant to Access the Volume */ 75 | /*------------------------------------------------------------------------*/ 76 | /* This function is called on entering file functions to lock the volume. 77 | / When a zero is returned, the file function fails with FR_TIMEOUT. 78 | */ 79 | 80 | int ff_req_grant ( /* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */ 81 | _SYNC_t sobj /* Sync object to wait */ 82 | ) 83 | { 84 | int ret; 85 | 86 | ret = (WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0); /* Win32 */ 87 | 88 | // ret = (wai_sem(sobj) == E_OK); /* uITRON */ 89 | 90 | // OSMutexPend(sobj, _FS_TIMEOUT, &err)); /* uC/OS-II */ 91 | // ret = (err == OS_NO_ERR); 92 | 93 | // ret = (xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE); /* FreeRTOS */ 94 | 95 | return ret; 96 | } 97 | 98 | 99 | 100 | /*------------------------------------------------------------------------*/ 101 | /* Release Grant to Access the Volume */ 102 | /*------------------------------------------------------------------------*/ 103 | /* This function is called on leaving file functions to unlock the volume. 104 | */ 105 | 106 | void ff_rel_grant ( 107 | _SYNC_t sobj /* Sync object to be signaled */ 108 | ) 109 | { 110 | ReleaseMutex(sobj); /* Win32 */ 111 | 112 | // sig_sem(sobj); /* uITRON */ 113 | 114 | // OSMutexPost(sobj); /* uC/OS-II */ 115 | 116 | // xSemaphoreGive(sobj); /* FreeRTOS */ 117 | 118 | } 119 | 120 | #endif 121 | 122 | 123 | 124 | 125 | #if _USE_LFN == 3 /* LFN with a working buffer on the heap */ 126 | /*------------------------------------------------------------------------*/ 127 | /* Allocate a memory block */ 128 | /*------------------------------------------------------------------------*/ 129 | /* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE. 130 | */ 131 | 132 | void* ff_memalloc ( /* Returns pointer to the allocated memory block */ 133 | UINT size /* Number of bytes to allocate */ 134 | ) 135 | { 136 | return malloc(size); 137 | } 138 | 139 | 140 | /*------------------------------------------------------------------------*/ 141 | /* Free a memory block */ 142 | /*------------------------------------------------------------------------*/ 143 | 144 | void ff_memfree( 145 | void* mblock /* Pointer to the memory block to free */ 146 | ) 147 | { 148 | free(mblock); 149 | } 150 | 151 | #endif 152 | -------------------------------------------------------------------------------- /code/HARDWARE/FLASH/flash.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/FLASH/flash.c -------------------------------------------------------------------------------- /code/HARDWARE/FLASH/flash.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/FLASH/flash.h -------------------------------------------------------------------------------- /code/HARDWARE/ITEMP/tsensor.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/ITEMP/tsensor.c -------------------------------------------------------------------------------- /code/HARDWARE/ITEMP/tsensor.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/ITEMP/tsensor.h -------------------------------------------------------------------------------- /code/HARDWARE/KEY/key.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/KEY/key.c -------------------------------------------------------------------------------- /code/HARDWARE/KEY/key.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/KEY/key.h -------------------------------------------------------------------------------- /code/HARDWARE/LCD/font.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/LCD/font.h -------------------------------------------------------------------------------- /code/HARDWARE/LCD/lcd.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/LCD/lcd.c -------------------------------------------------------------------------------- /code/HARDWARE/LCD/lcd.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/LCD/lcd.h -------------------------------------------------------------------------------- /code/HARDWARE/LED/led.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/LED/led.c -------------------------------------------------------------------------------- /code/HARDWARE/LED/led.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/LED/led.h -------------------------------------------------------------------------------- /code/HARDWARE/SD/MMC_SD.C: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/SD/MMC_SD.C -------------------------------------------------------------------------------- /code/HARDWARE/SD/MMC_SD.H: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/SD/MMC_SD.H -------------------------------------------------------------------------------- /code/HARDWARE/SPI/spi.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/SPI/spi.c -------------------------------------------------------------------------------- /code/HARDWARE/SPI/spi.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/SPI/spi.h -------------------------------------------------------------------------------- /code/HARDWARE/stmflash.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/stmflash.c -------------------------------------------------------------------------------- /code/HARDWARE/stmflash.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/HARDWARE/stmflash.h -------------------------------------------------------------------------------- /code/MALLOC/malloc.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/MALLOC/malloc.c -------------------------------------------------------------------------------- /code/MALLOC/malloc.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/MALLOC/malloc.h -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_cec.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_cec.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the CEC firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_CEC_H 25 | #define __STM32F10x_CEC_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup CEC 39 | * @{ 40 | */ 41 | 42 | 43 | /** @defgroup CEC_Exported_Types 44 | * @{ 45 | */ 46 | 47 | /** 48 | * @brief CEC Init structure definition 49 | */ 50 | typedef struct 51 | { 52 | uint16_t CEC_BitTimingMode; /*!< Configures the CEC Bit Timing Error Mode. 53 | This parameter can be a value of @ref CEC_BitTiming_Mode */ 54 | uint16_t CEC_BitPeriodMode; /*!< Configures the CEC Bit Period Error Mode. 55 | This parameter can be a value of @ref CEC_BitPeriod_Mode */ 56 | }CEC_InitTypeDef; 57 | 58 | /** 59 | * @} 60 | */ 61 | 62 | /** @defgroup CEC_Exported_Constants 63 | * @{ 64 | */ 65 | 66 | /** @defgroup CEC_BitTiming_Mode 67 | * @{ 68 | */ 69 | #define CEC_BitTimingStdMode ((uint16_t)0x00) /*!< Bit timing error Standard Mode */ 70 | #define CEC_BitTimingErrFreeMode CEC_CFGR_BTEM /*!< Bit timing error Free Mode */ 71 | 72 | #define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BitTimingStdMode) || \ 73 | ((MODE) == CEC_BitTimingErrFreeMode)) 74 | /** 75 | * @} 76 | */ 77 | 78 | /** @defgroup CEC_BitPeriod_Mode 79 | * @{ 80 | */ 81 | #define CEC_BitPeriodStdMode ((uint16_t)0x00) /*!< Bit period error Standard Mode */ 82 | #define CEC_BitPeriodFlexibleMode CEC_CFGR_BPEM /*!< Bit period error Flexible Mode */ 83 | 84 | #define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BitPeriodStdMode) || \ 85 | ((MODE) == CEC_BitPeriodFlexibleMode)) 86 | /** 87 | * @} 88 | */ 89 | 90 | 91 | /** @defgroup CEC_interrupts_definition 92 | * @{ 93 | */ 94 | #define CEC_IT_TERR CEC_CSR_TERR 95 | #define CEC_IT_TBTRF CEC_CSR_TBTRF 96 | #define CEC_IT_RERR CEC_CSR_RERR 97 | #define CEC_IT_RBTF CEC_CSR_RBTF 98 | #define IS_CEC_GET_IT(IT) (((IT) == CEC_IT_TERR) || ((IT) == CEC_IT_TBTRF) || \ 99 | ((IT) == CEC_IT_RERR) || ((IT) == CEC_IT_RBTF)) 100 | /** 101 | * @} 102 | */ 103 | 104 | 105 | /** @defgroup CEC_Own_Address 106 | * @{ 107 | */ 108 | #define IS_CEC_ADDRESS(ADDRESS) ((ADDRESS) < 0x10) 109 | /** 110 | * @} 111 | */ 112 | 113 | /** @defgroup CEC_Prescaler 114 | * @{ 115 | */ 116 | #define IS_CEC_PRESCALER(PRESCALER) ((PRESCALER) <= 0x3FFF) 117 | 118 | /** 119 | * @} 120 | */ 121 | 122 | /** @defgroup CEC_flags_definition 123 | * @{ 124 | */ 125 | 126 | /** 127 | * @brief ESR register flags 128 | */ 129 | #define CEC_FLAG_BTE ((uint32_t)0x10010000) 130 | #define CEC_FLAG_BPE ((uint32_t)0x10020000) 131 | #define CEC_FLAG_RBTFE ((uint32_t)0x10040000) 132 | #define CEC_FLAG_SBE ((uint32_t)0x10080000) 133 | #define CEC_FLAG_ACKE ((uint32_t)0x10100000) 134 | #define CEC_FLAG_LINE ((uint32_t)0x10200000) 135 | #define CEC_FLAG_TBTFE ((uint32_t)0x10400000) 136 | 137 | /** 138 | * @brief CSR register flags 139 | */ 140 | #define CEC_FLAG_TEOM ((uint32_t)0x00000002) 141 | #define CEC_FLAG_TERR ((uint32_t)0x00000004) 142 | #define CEC_FLAG_TBTRF ((uint32_t)0x00000008) 143 | #define CEC_FLAG_RSOM ((uint32_t)0x00000010) 144 | #define CEC_FLAG_REOM ((uint32_t)0x00000020) 145 | #define CEC_FLAG_RERR ((uint32_t)0x00000040) 146 | #define CEC_FLAG_RBTF ((uint32_t)0x00000080) 147 | 148 | #define IS_CEC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint32_t)0xFFFFFF03) == 0x00) && ((FLAG) != 0x00)) 149 | 150 | #define IS_CEC_GET_FLAG(FLAG) (((FLAG) == CEC_FLAG_BTE) || ((FLAG) == CEC_FLAG_BPE) || \ 151 | ((FLAG) == CEC_FLAG_RBTFE) || ((FLAG)== CEC_FLAG_SBE) || \ 152 | ((FLAG) == CEC_FLAG_ACKE) || ((FLAG) == CEC_FLAG_LINE) || \ 153 | ((FLAG) == CEC_FLAG_TBTFE) || ((FLAG) == CEC_FLAG_TEOM) || \ 154 | ((FLAG) == CEC_FLAG_TERR) || ((FLAG) == CEC_FLAG_TBTRF) || \ 155 | ((FLAG) == CEC_FLAG_RSOM) || ((FLAG) == CEC_FLAG_REOM) || \ 156 | ((FLAG) == CEC_FLAG_RERR) || ((FLAG) == CEC_FLAG_RBTF)) 157 | 158 | /** 159 | * @} 160 | */ 161 | 162 | /** 163 | * @} 164 | */ 165 | 166 | /** @defgroup CEC_Exported_Macros 167 | * @{ 168 | */ 169 | 170 | /** 171 | * @} 172 | */ 173 | 174 | /** @defgroup CEC_Exported_Functions 175 | * @{ 176 | */ 177 | void CEC_DeInit(void); 178 | void CEC_Init(CEC_InitTypeDef* CEC_InitStruct); 179 | void CEC_Cmd(FunctionalState NewState); 180 | void CEC_ITConfig(FunctionalState NewState); 181 | void CEC_OwnAddressConfig(uint8_t CEC_OwnAddress); 182 | void CEC_SetPrescaler(uint16_t CEC_Prescaler); 183 | void CEC_SendDataByte(uint8_t Data); 184 | uint8_t CEC_ReceiveDataByte(void); 185 | void CEC_StartOfMessage(void); 186 | void CEC_EndOfMessageCmd(FunctionalState NewState); 187 | FlagStatus CEC_GetFlagStatus(uint32_t CEC_FLAG); 188 | void CEC_ClearFlag(uint32_t CEC_FLAG); 189 | ITStatus CEC_GetITStatus(uint8_t CEC_IT); 190 | void CEC_ClearITPendingBit(uint16_t CEC_IT); 191 | 192 | #ifdef __cplusplus 193 | } 194 | #endif 195 | 196 | #endif /* __STM32F10x_CEC_H */ 197 | 198 | /** 199 | * @} 200 | */ 201 | 202 | /** 203 | * @} 204 | */ 205 | 206 | /** 207 | * @} 208 | */ 209 | 210 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 211 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_crc.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_crc.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the CRC firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_CRC_H 25 | #define __STM32F10x_CRC_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup CRC 39 | * @{ 40 | */ 41 | 42 | /** @defgroup CRC_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup CRC_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | /** 55 | * @} 56 | */ 57 | 58 | /** @defgroup CRC_Exported_Macros 59 | * @{ 60 | */ 61 | 62 | /** 63 | * @} 64 | */ 65 | 66 | /** @defgroup CRC_Exported_Functions 67 | * @{ 68 | */ 69 | 70 | void CRC_ResetDR(void); 71 | uint32_t CRC_CalcCRC(uint32_t Data); 72 | uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength); 73 | uint32_t CRC_GetCRC(void); 74 | void CRC_SetIDRegister(uint8_t IDValue); 75 | uint8_t CRC_GetIDRegister(void); 76 | 77 | #ifdef __cplusplus 78 | } 79 | #endif 80 | 81 | #endif /* __STM32F10x_CRC_H */ 82 | /** 83 | * @} 84 | */ 85 | 86 | /** 87 | * @} 88 | */ 89 | 90 | /** 91 | * @} 92 | */ 93 | 94 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 95 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_dbgmcu.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_dbgmcu.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the DBGMCU 8 | * firmware library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_DBGMCU_H 25 | #define __STM32F10x_DBGMCU_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup DBGMCU 39 | * @{ 40 | */ 41 | 42 | /** @defgroup DBGMCU_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup DBGMCU_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | #define DBGMCU_SLEEP ((uint32_t)0x00000001) 55 | #define DBGMCU_STOP ((uint32_t)0x00000002) 56 | #define DBGMCU_STANDBY ((uint32_t)0x00000004) 57 | #define DBGMCU_IWDG_STOP ((uint32_t)0x00000100) 58 | #define DBGMCU_WWDG_STOP ((uint32_t)0x00000200) 59 | #define DBGMCU_TIM1_STOP ((uint32_t)0x00000400) 60 | #define DBGMCU_TIM2_STOP ((uint32_t)0x00000800) 61 | #define DBGMCU_TIM3_STOP ((uint32_t)0x00001000) 62 | #define DBGMCU_TIM4_STOP ((uint32_t)0x00002000) 63 | #define DBGMCU_CAN1_STOP ((uint32_t)0x00004000) 64 | #define DBGMCU_I2C1_SMBUS_TIMEOUT ((uint32_t)0x00008000) 65 | #define DBGMCU_I2C2_SMBUS_TIMEOUT ((uint32_t)0x00010000) 66 | #define DBGMCU_TIM8_STOP ((uint32_t)0x00020000) 67 | #define DBGMCU_TIM5_STOP ((uint32_t)0x00040000) 68 | #define DBGMCU_TIM6_STOP ((uint32_t)0x00080000) 69 | #define DBGMCU_TIM7_STOP ((uint32_t)0x00100000) 70 | #define DBGMCU_CAN2_STOP ((uint32_t)0x00200000) 71 | #define DBGMCU_TIM15_STOP ((uint32_t)0x00400000) 72 | #define DBGMCU_TIM16_STOP ((uint32_t)0x00800000) 73 | #define DBGMCU_TIM17_STOP ((uint32_t)0x01000000) 74 | #define DBGMCU_TIM12_STOP ((uint32_t)0x02000000) 75 | #define DBGMCU_TIM13_STOP ((uint32_t)0x04000000) 76 | #define DBGMCU_TIM14_STOP ((uint32_t)0x08000000) 77 | #define DBGMCU_TIM9_STOP ((uint32_t)0x10000000) 78 | #define DBGMCU_TIM10_STOP ((uint32_t)0x20000000) 79 | #define DBGMCU_TIM11_STOP ((uint32_t)0x40000000) 80 | 81 | #define IS_DBGMCU_PERIPH(PERIPH) ((((PERIPH) & 0x800000F8) == 0x00) && ((PERIPH) != 0x00)) 82 | /** 83 | * @} 84 | */ 85 | 86 | /** @defgroup DBGMCU_Exported_Macros 87 | * @{ 88 | */ 89 | 90 | /** 91 | * @} 92 | */ 93 | 94 | /** @defgroup DBGMCU_Exported_Functions 95 | * @{ 96 | */ 97 | 98 | uint32_t DBGMCU_GetREVID(void); 99 | uint32_t DBGMCU_GetDEVID(void); 100 | void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState); 101 | 102 | #ifdef __cplusplus 103 | } 104 | #endif 105 | 106 | #endif /* __STM32F10x_DBGMCU_H */ 107 | /** 108 | * @} 109 | */ 110 | 111 | /** 112 | * @} 113 | */ 114 | 115 | /** 116 | * @} 117 | */ 118 | 119 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 120 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_exti.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_exti.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the EXTI firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_EXTI_H 25 | #define __STM32F10x_EXTI_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup EXTI 39 | * @{ 40 | */ 41 | 42 | /** @defgroup EXTI_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @brief EXTI mode enumeration 48 | */ 49 | 50 | typedef enum 51 | { 52 | EXTI_Mode_Interrupt = 0x00, 53 | EXTI_Mode_Event = 0x04 54 | }EXTIMode_TypeDef; 55 | 56 | #define IS_EXTI_MODE(MODE) (((MODE) == EXTI_Mode_Interrupt) || ((MODE) == EXTI_Mode_Event)) 57 | 58 | /** 59 | * @brief EXTI Trigger enumeration 60 | */ 61 | 62 | typedef enum 63 | { 64 | EXTI_Trigger_Rising = 0x08, 65 | EXTI_Trigger_Falling = 0x0C, 66 | EXTI_Trigger_Rising_Falling = 0x10 67 | }EXTITrigger_TypeDef; 68 | 69 | #define IS_EXTI_TRIGGER(TRIGGER) (((TRIGGER) == EXTI_Trigger_Rising) || \ 70 | ((TRIGGER) == EXTI_Trigger_Falling) || \ 71 | ((TRIGGER) == EXTI_Trigger_Rising_Falling)) 72 | /** 73 | * @brief EXTI Init Structure definition 74 | */ 75 | 76 | typedef struct 77 | { 78 | uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or disabled. 79 | This parameter can be any combination of @ref EXTI_Lines */ 80 | 81 | EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines. 82 | This parameter can be a value of @ref EXTIMode_TypeDef */ 83 | 84 | EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for the EXTI lines. 85 | This parameter can be a value of @ref EXTIMode_TypeDef */ 86 | 87 | FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI lines. 88 | This parameter can be set either to ENABLE or DISABLE */ 89 | }EXTI_InitTypeDef; 90 | 91 | /** 92 | * @} 93 | */ 94 | 95 | /** @defgroup EXTI_Exported_Constants 96 | * @{ 97 | */ 98 | 99 | /** @defgroup EXTI_Lines 100 | * @{ 101 | */ 102 | 103 | #define EXTI_Line0 ((uint32_t)0x00001) /*!< External interrupt line 0 */ 104 | #define EXTI_Line1 ((uint32_t)0x00002) /*!< External interrupt line 1 */ 105 | #define EXTI_Line2 ((uint32_t)0x00004) /*!< External interrupt line 2 */ 106 | #define EXTI_Line3 ((uint32_t)0x00008) /*!< External interrupt line 3 */ 107 | #define EXTI_Line4 ((uint32_t)0x00010) /*!< External interrupt line 4 */ 108 | #define EXTI_Line5 ((uint32_t)0x00020) /*!< External interrupt line 5 */ 109 | #define EXTI_Line6 ((uint32_t)0x00040) /*!< External interrupt line 6 */ 110 | #define EXTI_Line7 ((uint32_t)0x00080) /*!< External interrupt line 7 */ 111 | #define EXTI_Line8 ((uint32_t)0x00100) /*!< External interrupt line 8 */ 112 | #define EXTI_Line9 ((uint32_t)0x00200) /*!< External interrupt line 9 */ 113 | #define EXTI_Line10 ((uint32_t)0x00400) /*!< External interrupt line 10 */ 114 | #define EXTI_Line11 ((uint32_t)0x00800) /*!< External interrupt line 11 */ 115 | #define EXTI_Line12 ((uint32_t)0x01000) /*!< External interrupt line 12 */ 116 | #define EXTI_Line13 ((uint32_t)0x02000) /*!< External interrupt line 13 */ 117 | #define EXTI_Line14 ((uint32_t)0x04000) /*!< External interrupt line 14 */ 118 | #define EXTI_Line15 ((uint32_t)0x08000) /*!< External interrupt line 15 */ 119 | #define EXTI_Line16 ((uint32_t)0x10000) /*!< External interrupt line 16 Connected to the PVD Output */ 120 | #define EXTI_Line17 ((uint32_t)0x20000) /*!< External interrupt line 17 Connected to the RTC Alarm event */ 121 | #define EXTI_Line18 ((uint32_t)0x40000) /*!< External interrupt line 18 Connected to the USB Device/USB OTG FS 122 | Wakeup from suspend event */ 123 | #define EXTI_Line19 ((uint32_t)0x80000) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */ 124 | 125 | #define IS_EXTI_LINE(LINE) ((((LINE) & (uint32_t)0xFFF00000) == 0x00) && ((LINE) != (uint16_t)0x00)) 126 | #define IS_GET_EXTI_LINE(LINE) (((LINE) == EXTI_Line0) || ((LINE) == EXTI_Line1) || \ 127 | ((LINE) == EXTI_Line2) || ((LINE) == EXTI_Line3) || \ 128 | ((LINE) == EXTI_Line4) || ((LINE) == EXTI_Line5) || \ 129 | ((LINE) == EXTI_Line6) || ((LINE) == EXTI_Line7) || \ 130 | ((LINE) == EXTI_Line8) || ((LINE) == EXTI_Line9) || \ 131 | ((LINE) == EXTI_Line10) || ((LINE) == EXTI_Line11) || \ 132 | ((LINE) == EXTI_Line12) || ((LINE) == EXTI_Line13) || \ 133 | ((LINE) == EXTI_Line14) || ((LINE) == EXTI_Line15) || \ 134 | ((LINE) == EXTI_Line16) || ((LINE) == EXTI_Line17) || \ 135 | ((LINE) == EXTI_Line18) || ((LINE) == EXTI_Line19)) 136 | 137 | 138 | /** 139 | * @} 140 | */ 141 | 142 | /** 143 | * @} 144 | */ 145 | 146 | /** @defgroup EXTI_Exported_Macros 147 | * @{ 148 | */ 149 | 150 | /** 151 | * @} 152 | */ 153 | 154 | /** @defgroup EXTI_Exported_Functions 155 | * @{ 156 | */ 157 | 158 | void EXTI_DeInit(void); 159 | void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 160 | void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct); 161 | void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line); 162 | FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line); 163 | void EXTI_ClearFlag(uint32_t EXTI_Line); 164 | ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); 165 | void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 166 | 167 | #ifdef __cplusplus 168 | } 169 | #endif 170 | 171 | #endif /* __STM32F10x_EXTI_H */ 172 | /** 173 | * @} 174 | */ 175 | 176 | /** 177 | * @} 178 | */ 179 | 180 | /** 181 | * @} 182 | */ 183 | 184 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 185 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_iwdg.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_iwdg.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the IWDG 8 | * firmware library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_IWDG_H 25 | #define __STM32F10x_IWDG_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup IWDG 39 | * @{ 40 | */ 41 | 42 | /** @defgroup IWDG_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup IWDG_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | /** @defgroup IWDG_WriteAccess 55 | * @{ 56 | */ 57 | 58 | #define IWDG_WriteAccess_Enable ((uint16_t)0x5555) 59 | #define IWDG_WriteAccess_Disable ((uint16_t)0x0000) 60 | #define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \ 61 | ((ACCESS) == IWDG_WriteAccess_Disable)) 62 | /** 63 | * @} 64 | */ 65 | 66 | /** @defgroup IWDG_prescaler 67 | * @{ 68 | */ 69 | 70 | #define IWDG_Prescaler_4 ((uint8_t)0x00) 71 | #define IWDG_Prescaler_8 ((uint8_t)0x01) 72 | #define IWDG_Prescaler_16 ((uint8_t)0x02) 73 | #define IWDG_Prescaler_32 ((uint8_t)0x03) 74 | #define IWDG_Prescaler_64 ((uint8_t)0x04) 75 | #define IWDG_Prescaler_128 ((uint8_t)0x05) 76 | #define IWDG_Prescaler_256 ((uint8_t)0x06) 77 | #define IS_IWDG_PRESCALER(PRESCALER) (((PRESCALER) == IWDG_Prescaler_4) || \ 78 | ((PRESCALER) == IWDG_Prescaler_8) || \ 79 | ((PRESCALER) == IWDG_Prescaler_16) || \ 80 | ((PRESCALER) == IWDG_Prescaler_32) || \ 81 | ((PRESCALER) == IWDG_Prescaler_64) || \ 82 | ((PRESCALER) == IWDG_Prescaler_128)|| \ 83 | ((PRESCALER) == IWDG_Prescaler_256)) 84 | /** 85 | * @} 86 | */ 87 | 88 | /** @defgroup IWDG_Flag 89 | * @{ 90 | */ 91 | 92 | #define IWDG_FLAG_PVU ((uint16_t)0x0001) 93 | #define IWDG_FLAG_RVU ((uint16_t)0x0002) 94 | #define IS_IWDG_FLAG(FLAG) (((FLAG) == IWDG_FLAG_PVU) || ((FLAG) == IWDG_FLAG_RVU)) 95 | #define IS_IWDG_RELOAD(RELOAD) ((RELOAD) <= 0xFFF) 96 | /** 97 | * @} 98 | */ 99 | 100 | /** 101 | * @} 102 | */ 103 | 104 | /** @defgroup IWDG_Exported_Macros 105 | * @{ 106 | */ 107 | 108 | /** 109 | * @} 110 | */ 111 | 112 | /** @defgroup IWDG_Exported_Functions 113 | * @{ 114 | */ 115 | 116 | void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess); 117 | void IWDG_SetPrescaler(uint8_t IWDG_Prescaler); 118 | void IWDG_SetReload(uint16_t Reload); 119 | void IWDG_ReloadCounter(void); 120 | void IWDG_Enable(void); 121 | FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG); 122 | 123 | #ifdef __cplusplus 124 | } 125 | #endif 126 | 127 | #endif /* __STM32F10x_IWDG_H */ 128 | /** 129 | * @} 130 | */ 131 | 132 | /** 133 | * @} 134 | */ 135 | 136 | /** 137 | * @} 138 | */ 139 | 140 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 141 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_pwr.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_pwr.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the PWR firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_PWR_H 25 | #define __STM32F10x_PWR_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup PWR 39 | * @{ 40 | */ 41 | 42 | /** @defgroup PWR_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup PWR_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | /** @defgroup PVD_detection_level 55 | * @{ 56 | */ 57 | 58 | #define PWR_PVDLevel_2V2 ((uint32_t)0x00000000) 59 | #define PWR_PVDLevel_2V3 ((uint32_t)0x00000020) 60 | #define PWR_PVDLevel_2V4 ((uint32_t)0x00000040) 61 | #define PWR_PVDLevel_2V5 ((uint32_t)0x00000060) 62 | #define PWR_PVDLevel_2V6 ((uint32_t)0x00000080) 63 | #define PWR_PVDLevel_2V7 ((uint32_t)0x000000A0) 64 | #define PWR_PVDLevel_2V8 ((uint32_t)0x000000C0) 65 | #define PWR_PVDLevel_2V9 ((uint32_t)0x000000E0) 66 | #define IS_PWR_PVD_LEVEL(LEVEL) (((LEVEL) == PWR_PVDLevel_2V2) || ((LEVEL) == PWR_PVDLevel_2V3)|| \ 67 | ((LEVEL) == PWR_PVDLevel_2V4) || ((LEVEL) == PWR_PVDLevel_2V5)|| \ 68 | ((LEVEL) == PWR_PVDLevel_2V6) || ((LEVEL) == PWR_PVDLevel_2V7)|| \ 69 | ((LEVEL) == PWR_PVDLevel_2V8) || ((LEVEL) == PWR_PVDLevel_2V9)) 70 | /** 71 | * @} 72 | */ 73 | 74 | /** @defgroup Regulator_state_is_STOP_mode 75 | * @{ 76 | */ 77 | 78 | #define PWR_Regulator_ON ((uint32_t)0x00000000) 79 | #define PWR_Regulator_LowPower ((uint32_t)0x00000001) 80 | #define IS_PWR_REGULATOR(REGULATOR) (((REGULATOR) == PWR_Regulator_ON) || \ 81 | ((REGULATOR) == PWR_Regulator_LowPower)) 82 | /** 83 | * @} 84 | */ 85 | 86 | /** @defgroup STOP_mode_entry 87 | * @{ 88 | */ 89 | 90 | #define PWR_STOPEntry_WFI ((uint8_t)0x01) 91 | #define PWR_STOPEntry_WFE ((uint8_t)0x02) 92 | #define IS_PWR_STOP_ENTRY(ENTRY) (((ENTRY) == PWR_STOPEntry_WFI) || ((ENTRY) == PWR_STOPEntry_WFE)) 93 | 94 | /** 95 | * @} 96 | */ 97 | 98 | /** @defgroup PWR_Flag 99 | * @{ 100 | */ 101 | 102 | #define PWR_FLAG_WU ((uint32_t)0x00000001) 103 | #define PWR_FLAG_SB ((uint32_t)0x00000002) 104 | #define PWR_FLAG_PVDO ((uint32_t)0x00000004) 105 | #define IS_PWR_GET_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB) || \ 106 | ((FLAG) == PWR_FLAG_PVDO)) 107 | 108 | #define IS_PWR_CLEAR_FLAG(FLAG) (((FLAG) == PWR_FLAG_WU) || ((FLAG) == PWR_FLAG_SB)) 109 | /** 110 | * @} 111 | */ 112 | 113 | /** 114 | * @} 115 | */ 116 | 117 | /** @defgroup PWR_Exported_Macros 118 | * @{ 119 | */ 120 | 121 | /** 122 | * @} 123 | */ 124 | 125 | /** @defgroup PWR_Exported_Functions 126 | * @{ 127 | */ 128 | 129 | void PWR_DeInit(void); 130 | void PWR_BackupAccessCmd(FunctionalState NewState); 131 | void PWR_PVDCmd(FunctionalState NewState); 132 | void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel); 133 | void PWR_WakeUpPinCmd(FunctionalState NewState); 134 | void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); 135 | void PWR_EnterSTANDBYMode(void); 136 | FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG); 137 | void PWR_ClearFlag(uint32_t PWR_FLAG); 138 | 139 | #ifdef __cplusplus 140 | } 141 | #endif 142 | 143 | #endif /* __STM32F10x_PWR_H */ 144 | /** 145 | * @} 146 | */ 147 | 148 | /** 149 | * @} 150 | */ 151 | 152 | /** 153 | * @} 154 | */ 155 | 156 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 157 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_rtc.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_rtc.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the RTC firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_RTC_H 25 | #define __STM32F10x_RTC_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup RTC 39 | * @{ 40 | */ 41 | 42 | /** @defgroup RTC_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup RTC_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | /** @defgroup RTC_interrupts_define 55 | * @{ 56 | */ 57 | 58 | #define RTC_IT_OW ((uint16_t)0x0004) /*!< Overflow interrupt */ 59 | #define RTC_IT_ALR ((uint16_t)0x0002) /*!< Alarm interrupt */ 60 | #define RTC_IT_SEC ((uint16_t)0x0001) /*!< Second interrupt */ 61 | #define IS_RTC_IT(IT) ((((IT) & (uint16_t)0xFFF8) == 0x00) && ((IT) != 0x00)) 62 | #define IS_RTC_GET_IT(IT) (((IT) == RTC_IT_OW) || ((IT) == RTC_IT_ALR) || \ 63 | ((IT) == RTC_IT_SEC)) 64 | /** 65 | * @} 66 | */ 67 | 68 | /** @defgroup RTC_interrupts_flags 69 | * @{ 70 | */ 71 | 72 | #define RTC_FLAG_RTOFF ((uint16_t)0x0020) /*!< RTC Operation OFF flag */ 73 | #define RTC_FLAG_RSF ((uint16_t)0x0008) /*!< Registers Synchronized flag */ 74 | #define RTC_FLAG_OW ((uint16_t)0x0004) /*!< Overflow flag */ 75 | #define RTC_FLAG_ALR ((uint16_t)0x0002) /*!< Alarm flag */ 76 | #define RTC_FLAG_SEC ((uint16_t)0x0001) /*!< Second flag */ 77 | #define IS_RTC_CLEAR_FLAG(FLAG) ((((FLAG) & (uint16_t)0xFFF0) == 0x00) && ((FLAG) != 0x00)) 78 | #define IS_RTC_GET_FLAG(FLAG) (((FLAG) == RTC_FLAG_RTOFF) || ((FLAG) == RTC_FLAG_RSF) || \ 79 | ((FLAG) == RTC_FLAG_OW) || ((FLAG) == RTC_FLAG_ALR) || \ 80 | ((FLAG) == RTC_FLAG_SEC)) 81 | #define IS_RTC_PRESCALER(PRESCALER) ((PRESCALER) <= 0xFFFFF) 82 | 83 | /** 84 | * @} 85 | */ 86 | 87 | /** 88 | * @} 89 | */ 90 | 91 | /** @defgroup RTC_Exported_Macros 92 | * @{ 93 | */ 94 | 95 | /** 96 | * @} 97 | */ 98 | 99 | /** @defgroup RTC_Exported_Functions 100 | * @{ 101 | */ 102 | 103 | void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); 104 | void RTC_EnterConfigMode(void); 105 | void RTC_ExitConfigMode(void); 106 | uint32_t RTC_GetCounter(void); 107 | void RTC_SetCounter(uint32_t CounterValue); 108 | void RTC_SetPrescaler(uint32_t PrescalerValue); 109 | void RTC_SetAlarm(uint32_t AlarmValue); 110 | uint32_t RTC_GetDivider(void); 111 | void RTC_WaitForLastTask(void); 112 | void RTC_WaitForSynchro(void); 113 | FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG); 114 | void RTC_ClearFlag(uint16_t RTC_FLAG); 115 | ITStatus RTC_GetITStatus(uint16_t RTC_IT); 116 | void RTC_ClearITPendingBit(uint16_t RTC_IT); 117 | 118 | #ifdef __cplusplus 119 | } 120 | #endif 121 | 122 | #endif /* __STM32F10x_RTC_H */ 123 | /** 124 | * @} 125 | */ 126 | 127 | /** 128 | * @} 129 | */ 130 | 131 | /** 132 | * @} 133 | */ 134 | 135 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 136 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/inc/stm32f10x_wwdg.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_wwdg.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file contains all the functions prototypes for the WWDG firmware 8 | * library. 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Define to prevent recursive inclusion -------------------------------------*/ 24 | #ifndef __STM32F10x_WWDG_H 25 | #define __STM32F10x_WWDG_H 26 | 27 | #ifdef __cplusplus 28 | extern "C" { 29 | #endif 30 | 31 | /* Includes ------------------------------------------------------------------*/ 32 | #include "stm32f10x.h" 33 | 34 | /** @addtogroup STM32F10x_StdPeriph_Driver 35 | * @{ 36 | */ 37 | 38 | /** @addtogroup WWDG 39 | * @{ 40 | */ 41 | 42 | /** @defgroup WWDG_Exported_Types 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup WWDG_Exported_Constants 51 | * @{ 52 | */ 53 | 54 | /** @defgroup WWDG_Prescaler 55 | * @{ 56 | */ 57 | 58 | #define WWDG_Prescaler_1 ((uint32_t)0x00000000) 59 | #define WWDG_Prescaler_2 ((uint32_t)0x00000080) 60 | #define WWDG_Prescaler_4 ((uint32_t)0x00000100) 61 | #define WWDG_Prescaler_8 ((uint32_t)0x00000180) 62 | #define IS_WWDG_PRESCALER(PRESCALER) (((PRESCALER) == WWDG_Prescaler_1) || \ 63 | ((PRESCALER) == WWDG_Prescaler_2) || \ 64 | ((PRESCALER) == WWDG_Prescaler_4) || \ 65 | ((PRESCALER) == WWDG_Prescaler_8)) 66 | #define IS_WWDG_WINDOW_VALUE(VALUE) ((VALUE) <= 0x7F) 67 | #define IS_WWDG_COUNTER(COUNTER) (((COUNTER) >= 0x40) && ((COUNTER) <= 0x7F)) 68 | 69 | /** 70 | * @} 71 | */ 72 | 73 | /** 74 | * @} 75 | */ 76 | 77 | /** @defgroup WWDG_Exported_Macros 78 | * @{ 79 | */ 80 | /** 81 | * @} 82 | */ 83 | 84 | /** @defgroup WWDG_Exported_Functions 85 | * @{ 86 | */ 87 | 88 | void WWDG_DeInit(void); 89 | void WWDG_SetPrescaler(uint32_t WWDG_Prescaler); 90 | void WWDG_SetWindowValue(uint8_t WindowValue); 91 | void WWDG_EnableIT(void); 92 | void WWDG_SetCounter(uint8_t Counter); 93 | void WWDG_Enable(uint8_t Counter); 94 | FlagStatus WWDG_GetFlagStatus(void); 95 | void WWDG_ClearFlag(void); 96 | 97 | #ifdef __cplusplus 98 | } 99 | #endif 100 | 101 | #endif /* __STM32F10x_WWDG_H */ 102 | 103 | /** 104 | * @} 105 | */ 106 | 107 | /** 108 | * @} 109 | */ 110 | 111 | /** 112 | * @} 113 | */ 114 | 115 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 116 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/misc.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file misc.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file provides all the miscellaneous firmware functions (add-on 8 | * to CMSIS functions). 9 | ****************************************************************************** 10 | * @attention 11 | * 12 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 13 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 14 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 15 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 16 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 17 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 18 | * 19 | *

© COPYRIGHT 2011 STMicroelectronics

20 | ****************************************************************************** 21 | */ 22 | 23 | /* Includes ------------------------------------------------------------------*/ 24 | #include "misc.h" 25 | 26 | /** @addtogroup STM32F10x_StdPeriph_Driver 27 | * @{ 28 | */ 29 | 30 | /** @defgroup MISC 31 | * @brief MISC driver modules 32 | * @{ 33 | */ 34 | 35 | /** @defgroup MISC_Private_TypesDefinitions 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @} 41 | */ 42 | 43 | /** @defgroup MISC_Private_Defines 44 | * @{ 45 | */ 46 | 47 | #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) 48 | /** 49 | * @} 50 | */ 51 | 52 | /** @defgroup MISC_Private_Macros 53 | * @{ 54 | */ 55 | 56 | /** 57 | * @} 58 | */ 59 | 60 | /** @defgroup MISC_Private_Variables 61 | * @{ 62 | */ 63 | 64 | /** 65 | * @} 66 | */ 67 | 68 | /** @defgroup MISC_Private_FunctionPrototypes 69 | * @{ 70 | */ 71 | 72 | /** 73 | * @} 74 | */ 75 | 76 | /** @defgroup MISC_Private_Functions 77 | * @{ 78 | */ 79 | 80 | /** 81 | * @brief Configures the priority grouping: pre-emption priority and subpriority. 82 | * @param NVIC_PriorityGroup: specifies the priority grouping bits length. 83 | * This parameter can be one of the following values: 84 | * @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority 85 | * 4 bits for subpriority 86 | * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority 87 | * 3 bits for subpriority 88 | * @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority 89 | * 2 bits for subpriority 90 | * @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority 91 | * 1 bits for subpriority 92 | * @arg NVIC_PriorityGroup_4: 4 bits for pre-emption priority 93 | * 0 bits for subpriority 94 | * @retval None 95 | */ 96 | void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) 97 | { 98 | /* Check the parameters */ 99 | assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); 100 | 101 | /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */ 102 | SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; 103 | } 104 | 105 | /** 106 | * @brief Initializes the NVIC peripheral according to the specified 107 | * parameters in the NVIC_InitStruct. 108 | * @param NVIC_InitStruct: pointer to a NVIC_InitTypeDef structure that contains 109 | * the configuration information for the specified NVIC peripheral. 110 | * @retval None 111 | */ 112 | void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) 113 | { 114 | uint32_t tmppriority = 0x00, tmppre = 0x00, tmpsub = 0x0F; 115 | 116 | /* Check the parameters */ 117 | assert_param(IS_FUNCTIONAL_STATE(NVIC_InitStruct->NVIC_IRQChannelCmd)); 118 | assert_param(IS_NVIC_PREEMPTION_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority)); 119 | assert_param(IS_NVIC_SUB_PRIORITY(NVIC_InitStruct->NVIC_IRQChannelSubPriority)); 120 | 121 | if (NVIC_InitStruct->NVIC_IRQChannelCmd != DISABLE) 122 | { 123 | /* Compute the Corresponding IRQ Priority --------------------------------*/ 124 | tmppriority = (0x700 - ((SCB->AIRCR) & (uint32_t)0x700))>> 0x08; 125 | tmppre = (0x4 - tmppriority); 126 | tmpsub = tmpsub >> tmppriority; 127 | 128 | tmppriority = (uint32_t)NVIC_InitStruct->NVIC_IRQChannelPreemptionPriority << tmppre; 129 | tmppriority |= NVIC_InitStruct->NVIC_IRQChannelSubPriority & tmpsub; 130 | tmppriority = tmppriority << 0x04; 131 | 132 | NVIC->IP[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority; 133 | 134 | /* Enable the Selected IRQ Channels --------------------------------------*/ 135 | NVIC->ISER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = 136 | (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); 137 | } 138 | else 139 | { 140 | /* Disable the Selected IRQ Channels -------------------------------------*/ 141 | NVIC->ICER[NVIC_InitStruct->NVIC_IRQChannel >> 0x05] = 142 | (uint32_t)0x01 << (NVIC_InitStruct->NVIC_IRQChannel & (uint8_t)0x1F); 143 | } 144 | } 145 | 146 | /** 147 | * @brief Sets the vector table location and Offset. 148 | * @param NVIC_VectTab: specifies if the vector table is in RAM or FLASH memory. 149 | * This parameter can be one of the following values: 150 | * @arg NVIC_VectTab_RAM 151 | * @arg NVIC_VectTab_FLASH 152 | * @param Offset: Vector Table base offset field. This value must be a multiple 153 | * of 0x200. 154 | * @retval None 155 | */ 156 | void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset) 157 | { 158 | /* Check the parameters */ 159 | assert_param(IS_NVIC_VECTTAB(NVIC_VectTab)); 160 | assert_param(IS_NVIC_OFFSET(Offset)); 161 | 162 | SCB->VTOR = NVIC_VectTab | (Offset & (uint32_t)0x1FFFFF80); 163 | } 164 | 165 | /** 166 | * @brief Selects the condition for the system to enter low power mode. 167 | * @param LowPowerMode: Specifies the new mode for the system to enter low power mode. 168 | * This parameter can be one of the following values: 169 | * @arg NVIC_LP_SEVONPEND 170 | * @arg NVIC_LP_SLEEPDEEP 171 | * @arg NVIC_LP_SLEEPONEXIT 172 | * @param NewState: new state of LP condition. This parameter can be: ENABLE or DISABLE. 173 | * @retval None 174 | */ 175 | void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState) 176 | { 177 | /* Check the parameters */ 178 | assert_param(IS_NVIC_LP(LowPowerMode)); 179 | assert_param(IS_FUNCTIONAL_STATE(NewState)); 180 | 181 | if (NewState != DISABLE) 182 | { 183 | SCB->SCR |= LowPowerMode; 184 | } 185 | else 186 | { 187 | SCB->SCR &= (uint32_t)(~(uint32_t)LowPowerMode); 188 | } 189 | } 190 | 191 | /** 192 | * @brief Configures the SysTick clock source. 193 | * @param SysTick_CLKSource: specifies the SysTick clock source. 194 | * This parameter can be one of the following values: 195 | * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source. 196 | * @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source. 197 | * @retval None 198 | */ 199 | void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource) 200 | { 201 | /* Check the parameters */ 202 | assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource)); 203 | if (SysTick_CLKSource == SysTick_CLKSource_HCLK) 204 | { 205 | SysTick->CTRL |= SysTick_CLKSource_HCLK; 206 | } 207 | else 208 | { 209 | SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8; 210 | } 211 | } 212 | 213 | /** 214 | * @} 215 | */ 216 | 217 | /** 218 | * @} 219 | */ 220 | 221 | /** 222 | * @} 223 | */ 224 | 225 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 226 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_crc.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_crc.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file provides all the CRC firmware functions. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm32f10x_crc.h" 24 | 25 | /** @addtogroup STM32F10x_StdPeriph_Driver 26 | * @{ 27 | */ 28 | 29 | /** @defgroup CRC 30 | * @brief CRC driver modules 31 | * @{ 32 | */ 33 | 34 | /** @defgroup CRC_Private_TypesDefinitions 35 | * @{ 36 | */ 37 | 38 | /** 39 | * @} 40 | */ 41 | 42 | /** @defgroup CRC_Private_Defines 43 | * @{ 44 | */ 45 | 46 | /** 47 | * @} 48 | */ 49 | 50 | /** @defgroup CRC_Private_Macros 51 | * @{ 52 | */ 53 | 54 | /** 55 | * @} 56 | */ 57 | 58 | /** @defgroup CRC_Private_Variables 59 | * @{ 60 | */ 61 | 62 | /** 63 | * @} 64 | */ 65 | 66 | /** @defgroup CRC_Private_FunctionPrototypes 67 | * @{ 68 | */ 69 | 70 | /** 71 | * @} 72 | */ 73 | 74 | /** @defgroup CRC_Private_Functions 75 | * @{ 76 | */ 77 | 78 | /** 79 | * @brief Resets the CRC Data register (DR). 80 | * @param None 81 | * @retval None 82 | */ 83 | void CRC_ResetDR(void) 84 | { 85 | /* Reset CRC generator */ 86 | CRC->CR = CRC_CR_RESET; 87 | } 88 | 89 | /** 90 | * @brief Computes the 32-bit CRC of a given data word(32-bit). 91 | * @param Data: data word(32-bit) to compute its CRC 92 | * @retval 32-bit CRC 93 | */ 94 | uint32_t CRC_CalcCRC(uint32_t Data) 95 | { 96 | CRC->DR = Data; 97 | 98 | return (CRC->DR); 99 | } 100 | 101 | /** 102 | * @brief Computes the 32-bit CRC of a given buffer of data word(32-bit). 103 | * @param pBuffer: pointer to the buffer containing the data to be computed 104 | * @param BufferLength: length of the buffer to be computed 105 | * @retval 32-bit CRC 106 | */ 107 | uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength) 108 | { 109 | uint32_t index = 0; 110 | 111 | for(index = 0; index < BufferLength; index++) 112 | { 113 | CRC->DR = pBuffer[index]; 114 | } 115 | return (CRC->DR); 116 | } 117 | 118 | /** 119 | * @brief Returns the current CRC value. 120 | * @param None 121 | * @retval 32-bit CRC 122 | */ 123 | uint32_t CRC_GetCRC(void) 124 | { 125 | return (CRC->DR); 126 | } 127 | 128 | /** 129 | * @brief Stores a 8-bit data in the Independent Data(ID) register. 130 | * @param IDValue: 8-bit value to be stored in the ID register 131 | * @retval None 132 | */ 133 | void CRC_SetIDRegister(uint8_t IDValue) 134 | { 135 | CRC->IDR = IDValue; 136 | } 137 | 138 | /** 139 | * @brief Returns the 8-bit data stored in the Independent Data(ID) register 140 | * @param None 141 | * @retval 8-bit value of the ID register 142 | */ 143 | uint8_t CRC_GetIDRegister(void) 144 | { 145 | return (CRC->IDR); 146 | } 147 | 148 | /** 149 | * @} 150 | */ 151 | 152 | /** 153 | * @} 154 | */ 155 | 156 | /** 157 | * @} 158 | */ 159 | 160 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 161 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_dbgmcu.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_dbgmcu.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file provides all the DBGMCU firmware functions. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm32f10x_dbgmcu.h" 24 | 25 | /** @addtogroup STM32F10x_StdPeriph_Driver 26 | * @{ 27 | */ 28 | 29 | /** @defgroup DBGMCU 30 | * @brief DBGMCU driver modules 31 | * @{ 32 | */ 33 | 34 | /** @defgroup DBGMCU_Private_TypesDefinitions 35 | * @{ 36 | */ 37 | 38 | /** 39 | * @} 40 | */ 41 | 42 | /** @defgroup DBGMCU_Private_Defines 43 | * @{ 44 | */ 45 | 46 | #define IDCODE_DEVID_MASK ((uint32_t)0x00000FFF) 47 | /** 48 | * @} 49 | */ 50 | 51 | /** @defgroup DBGMCU_Private_Macros 52 | * @{ 53 | */ 54 | 55 | /** 56 | * @} 57 | */ 58 | 59 | /** @defgroup DBGMCU_Private_Variables 60 | * @{ 61 | */ 62 | 63 | /** 64 | * @} 65 | */ 66 | 67 | /** @defgroup DBGMCU_Private_FunctionPrototypes 68 | * @{ 69 | */ 70 | 71 | /** 72 | * @} 73 | */ 74 | 75 | /** @defgroup DBGMCU_Private_Functions 76 | * @{ 77 | */ 78 | 79 | /** 80 | * @brief Returns the device revision identifier. 81 | * @param None 82 | * @retval Device revision identifier 83 | */ 84 | uint32_t DBGMCU_GetREVID(void) 85 | { 86 | return(DBGMCU->IDCODE >> 16); 87 | } 88 | 89 | /** 90 | * @brief Returns the device identifier. 91 | * @param None 92 | * @retval Device identifier 93 | */ 94 | uint32_t DBGMCU_GetDEVID(void) 95 | { 96 | return(DBGMCU->IDCODE & IDCODE_DEVID_MASK); 97 | } 98 | 99 | /** 100 | * @brief Configures the specified peripheral and low power mode behavior 101 | * when the MCU under Debug mode. 102 | * @param DBGMCU_Periph: specifies the peripheral and low power mode. 103 | * This parameter can be any combination of the following values: 104 | * @arg DBGMCU_SLEEP: Keep debugger connection during SLEEP mode 105 | * @arg DBGMCU_STOP: Keep debugger connection during STOP mode 106 | * @arg DBGMCU_STANDBY: Keep debugger connection during STANDBY mode 107 | * @arg DBGMCU_IWDG_STOP: Debug IWDG stopped when Core is halted 108 | * @arg DBGMCU_WWDG_STOP: Debug WWDG stopped when Core is halted 109 | * @arg DBGMCU_TIM1_STOP: TIM1 counter stopped when Core is halted 110 | * @arg DBGMCU_TIM2_STOP: TIM2 counter stopped when Core is halted 111 | * @arg DBGMCU_TIM3_STOP: TIM3 counter stopped when Core is halted 112 | * @arg DBGMCU_TIM4_STOP: TIM4 counter stopped when Core is halted 113 | * @arg DBGMCU_CAN1_STOP: Debug CAN2 stopped when Core is halted 114 | * @arg DBGMCU_I2C1_SMBUS_TIMEOUT: I2C1 SMBUS timeout mode stopped when Core is halted 115 | * @arg DBGMCU_I2C2_SMBUS_TIMEOUT: I2C2 SMBUS timeout mode stopped when Core is halted 116 | * @arg DBGMCU_TIM5_STOP: TIM5 counter stopped when Core is halted 117 | * @arg DBGMCU_TIM6_STOP: TIM6 counter stopped when Core is halted 118 | * @arg DBGMCU_TIM7_STOP: TIM7 counter stopped when Core is halted 119 | * @arg DBGMCU_TIM8_STOP: TIM8 counter stopped when Core is halted 120 | * @arg DBGMCU_CAN2_STOP: Debug CAN2 stopped when Core is halted 121 | * @arg DBGMCU_TIM15_STOP: TIM15 counter stopped when Core is halted 122 | * @arg DBGMCU_TIM16_STOP: TIM16 counter stopped when Core is halted 123 | * @arg DBGMCU_TIM17_STOP: TIM17 counter stopped when Core is halted 124 | * @arg DBGMCU_TIM9_STOP: TIM9 counter stopped when Core is halted 125 | * @arg DBGMCU_TIM10_STOP: TIM10 counter stopped when Core is halted 126 | * @arg DBGMCU_TIM11_STOP: TIM11 counter stopped when Core is halted 127 | * @arg DBGMCU_TIM12_STOP: TIM12 counter stopped when Core is halted 128 | * @arg DBGMCU_TIM13_STOP: TIM13 counter stopped when Core is halted 129 | * @arg DBGMCU_TIM14_STOP: TIM14 counter stopped when Core is halted 130 | * @param NewState: new state of the specified peripheral in Debug mode. 131 | * This parameter can be: ENABLE or DISABLE. 132 | * @retval None 133 | */ 134 | void DBGMCU_Config(uint32_t DBGMCU_Periph, FunctionalState NewState) 135 | { 136 | /* Check the parameters */ 137 | assert_param(IS_DBGMCU_PERIPH(DBGMCU_Periph)); 138 | assert_param(IS_FUNCTIONAL_STATE(NewState)); 139 | 140 | if (NewState != DISABLE) 141 | { 142 | DBGMCU->CR |= DBGMCU_Periph; 143 | } 144 | else 145 | { 146 | DBGMCU->CR &= ~DBGMCU_Periph; 147 | } 148 | } 149 | 150 | /** 151 | * @} 152 | */ 153 | 154 | /** 155 | * @} 156 | */ 157 | 158 | /** 159 | * @} 160 | */ 161 | 162 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 163 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_flash.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/STM32F10x_FWLib/src/stm32f10x_flash.c -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_i2c.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/STM32F10x_FWLib/src/stm32f10x_i2c.c -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_iwdg.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_iwdg.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file provides all the IWDG firmware functions. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm32f10x_iwdg.h" 24 | 25 | /** @addtogroup STM32F10x_StdPeriph_Driver 26 | * @{ 27 | */ 28 | 29 | /** @defgroup IWDG 30 | * @brief IWDG driver modules 31 | * @{ 32 | */ 33 | 34 | /** @defgroup IWDG_Private_TypesDefinitions 35 | * @{ 36 | */ 37 | 38 | /** 39 | * @} 40 | */ 41 | 42 | /** @defgroup IWDG_Private_Defines 43 | * @{ 44 | */ 45 | 46 | /* ---------------------- IWDG registers bit mask ----------------------------*/ 47 | 48 | /* KR register bit mask */ 49 | #define KR_KEY_Reload ((uint16_t)0xAAAA) 50 | #define KR_KEY_Enable ((uint16_t)0xCCCC) 51 | 52 | /** 53 | * @} 54 | */ 55 | 56 | /** @defgroup IWDG_Private_Macros 57 | * @{ 58 | */ 59 | 60 | /** 61 | * @} 62 | */ 63 | 64 | /** @defgroup IWDG_Private_Variables 65 | * @{ 66 | */ 67 | 68 | /** 69 | * @} 70 | */ 71 | 72 | /** @defgroup IWDG_Private_FunctionPrototypes 73 | * @{ 74 | */ 75 | 76 | /** 77 | * @} 78 | */ 79 | 80 | /** @defgroup IWDG_Private_Functions 81 | * @{ 82 | */ 83 | 84 | /** 85 | * @brief Enables or disables write access to IWDG_PR and IWDG_RLR registers. 86 | * @param IWDG_WriteAccess: new state of write access to IWDG_PR and IWDG_RLR registers. 87 | * This parameter can be one of the following values: 88 | * @arg IWDG_WriteAccess_Enable: Enable write access to IWDG_PR and IWDG_RLR registers 89 | * @arg IWDG_WriteAccess_Disable: Disable write access to IWDG_PR and IWDG_RLR registers 90 | * @retval None 91 | */ 92 | void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess) 93 | { 94 | /* Check the parameters */ 95 | assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); 96 | IWDG->KR = IWDG_WriteAccess; 97 | } 98 | 99 | /** 100 | * @brief Sets IWDG Prescaler value. 101 | * @param IWDG_Prescaler: specifies the IWDG Prescaler value. 102 | * This parameter can be one of the following values: 103 | * @arg IWDG_Prescaler_4: IWDG prescaler set to 4 104 | * @arg IWDG_Prescaler_8: IWDG prescaler set to 8 105 | * @arg IWDG_Prescaler_16: IWDG prescaler set to 16 106 | * @arg IWDG_Prescaler_32: IWDG prescaler set to 32 107 | * @arg IWDG_Prescaler_64: IWDG prescaler set to 64 108 | * @arg IWDG_Prescaler_128: IWDG prescaler set to 128 109 | * @arg IWDG_Prescaler_256: IWDG prescaler set to 256 110 | * @retval None 111 | */ 112 | void IWDG_SetPrescaler(uint8_t IWDG_Prescaler) 113 | { 114 | /* Check the parameters */ 115 | assert_param(IS_IWDG_PRESCALER(IWDG_Prescaler)); 116 | IWDG->PR = IWDG_Prescaler; 117 | } 118 | 119 | /** 120 | * @brief Sets IWDG Reload value. 121 | * @param Reload: specifies the IWDG Reload value. 122 | * This parameter must be a number between 0 and 0x0FFF. 123 | * @retval None 124 | */ 125 | void IWDG_SetReload(uint16_t Reload) 126 | { 127 | /* Check the parameters */ 128 | assert_param(IS_IWDG_RELOAD(Reload)); 129 | IWDG->RLR = Reload; 130 | } 131 | 132 | /** 133 | * @brief Reloads IWDG counter with value defined in the reload register 134 | * (write access to IWDG_PR and IWDG_RLR registers disabled). 135 | * @param None 136 | * @retval None 137 | */ 138 | void IWDG_ReloadCounter(void) 139 | { 140 | IWDG->KR = KR_KEY_Reload; 141 | } 142 | 143 | /** 144 | * @brief Enables IWDG (write access to IWDG_PR and IWDG_RLR registers disabled). 145 | * @param None 146 | * @retval None 147 | */ 148 | void IWDG_Enable(void) 149 | { 150 | IWDG->KR = KR_KEY_Enable; 151 | } 152 | 153 | /** 154 | * @brief Checks whether the specified IWDG flag is set or not. 155 | * @param IWDG_FLAG: specifies the flag to check. 156 | * This parameter can be one of the following values: 157 | * @arg IWDG_FLAG_PVU: Prescaler Value Update on going 158 | * @arg IWDG_FLAG_RVU: Reload Value Update on going 159 | * @retval The new state of IWDG_FLAG (SET or RESET). 160 | */ 161 | FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG) 162 | { 163 | FlagStatus bitstatus = RESET; 164 | /* Check the parameters */ 165 | assert_param(IS_IWDG_FLAG(IWDG_FLAG)); 166 | if ((IWDG->SR & IWDG_FLAG) != (uint32_t)RESET) 167 | { 168 | bitstatus = SET; 169 | } 170 | else 171 | { 172 | bitstatus = RESET; 173 | } 174 | /* Return the flag status */ 175 | return bitstatus; 176 | } 177 | 178 | /** 179 | * @} 180 | */ 181 | 182 | /** 183 | * @} 184 | */ 185 | 186 | /** 187 | * @} 188 | */ 189 | 190 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 191 | -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_usart.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/STM32F10x_FWLib/src/stm32f10x_usart.c -------------------------------------------------------------------------------- /code/STM32F10x_FWLib/src/stm32f10x_wwdg.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file stm32f10x_wwdg.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief This file provides all the WWDG firmware functions. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Includes ------------------------------------------------------------------*/ 23 | #include "stm32f10x_wwdg.h" 24 | #include "stm32f10x_rcc.h" 25 | 26 | /** @addtogroup STM32F10x_StdPeriph_Driver 27 | * @{ 28 | */ 29 | 30 | /** @defgroup WWDG 31 | * @brief WWDG driver modules 32 | * @{ 33 | */ 34 | 35 | /** @defgroup WWDG_Private_TypesDefinitions 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @} 41 | */ 42 | 43 | /** @defgroup WWDG_Private_Defines 44 | * @{ 45 | */ 46 | 47 | /* ----------- WWDG registers bit address in the alias region ----------- */ 48 | #define WWDG_OFFSET (WWDG_BASE - PERIPH_BASE) 49 | 50 | /* Alias word address of EWI bit */ 51 | #define CFR_OFFSET (WWDG_OFFSET + 0x04) 52 | #define EWI_BitNumber 0x09 53 | #define CFR_EWI_BB (PERIPH_BB_BASE + (CFR_OFFSET * 32) + (EWI_BitNumber * 4)) 54 | 55 | /* --------------------- WWDG registers bit mask ------------------------ */ 56 | 57 | /* CR register bit mask */ 58 | #define CR_WDGA_Set ((uint32_t)0x00000080) 59 | 60 | /* CFR register bit mask */ 61 | #define CFR_WDGTB_Mask ((uint32_t)0xFFFFFE7F) 62 | #define CFR_W_Mask ((uint32_t)0xFFFFFF80) 63 | #define BIT_Mask ((uint8_t)0x7F) 64 | 65 | /** 66 | * @} 67 | */ 68 | 69 | /** @defgroup WWDG_Private_Macros 70 | * @{ 71 | */ 72 | 73 | /** 74 | * @} 75 | */ 76 | 77 | /** @defgroup WWDG_Private_Variables 78 | * @{ 79 | */ 80 | 81 | /** 82 | * @} 83 | */ 84 | 85 | /** @defgroup WWDG_Private_FunctionPrototypes 86 | * @{ 87 | */ 88 | 89 | /** 90 | * @} 91 | */ 92 | 93 | /** @defgroup WWDG_Private_Functions 94 | * @{ 95 | */ 96 | 97 | /** 98 | * @brief Deinitializes the WWDG peripheral registers to their default reset values. 99 | * @param None 100 | * @retval None 101 | */ 102 | void WWDG_DeInit(void) 103 | { 104 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, ENABLE); 105 | RCC_APB1PeriphResetCmd(RCC_APB1Periph_WWDG, DISABLE); 106 | } 107 | 108 | /** 109 | * @brief Sets the WWDG Prescaler. 110 | * @param WWDG_Prescaler: specifies the WWDG Prescaler. 111 | * This parameter can be one of the following values: 112 | * @arg WWDG_Prescaler_1: WWDG counter clock = (PCLK1/4096)/1 113 | * @arg WWDG_Prescaler_2: WWDG counter clock = (PCLK1/4096)/2 114 | * @arg WWDG_Prescaler_4: WWDG counter clock = (PCLK1/4096)/4 115 | * @arg WWDG_Prescaler_8: WWDG counter clock = (PCLK1/4096)/8 116 | * @retval None 117 | */ 118 | void WWDG_SetPrescaler(uint32_t WWDG_Prescaler) 119 | { 120 | uint32_t tmpreg = 0; 121 | /* Check the parameters */ 122 | assert_param(IS_WWDG_PRESCALER(WWDG_Prescaler)); 123 | /* Clear WDGTB[1:0] bits */ 124 | tmpreg = WWDG->CFR & CFR_WDGTB_Mask; 125 | /* Set WDGTB[1:0] bits according to WWDG_Prescaler value */ 126 | tmpreg |= WWDG_Prescaler; 127 | /* Store the new value */ 128 | WWDG->CFR = tmpreg; 129 | } 130 | 131 | /** 132 | * @brief Sets the WWDG window value. 133 | * @param WindowValue: specifies the window value to be compared to the downcounter. 134 | * This parameter value must be lower than 0x80. 135 | * @retval None 136 | */ 137 | void WWDG_SetWindowValue(uint8_t WindowValue) 138 | { 139 | __IO uint32_t tmpreg = 0; 140 | 141 | /* Check the parameters */ 142 | assert_param(IS_WWDG_WINDOW_VALUE(WindowValue)); 143 | /* Clear W[6:0] bits */ 144 | 145 | tmpreg = WWDG->CFR & CFR_W_Mask; 146 | 147 | /* Set W[6:0] bits according to WindowValue value */ 148 | tmpreg |= WindowValue & (uint32_t) BIT_Mask; 149 | 150 | /* Store the new value */ 151 | WWDG->CFR = tmpreg; 152 | } 153 | 154 | /** 155 | * @brief Enables the WWDG Early Wakeup interrupt(EWI). 156 | * @param None 157 | * @retval None 158 | */ 159 | void WWDG_EnableIT(void) 160 | { 161 | *(__IO uint32_t *) CFR_EWI_BB = (uint32_t)ENABLE; 162 | } 163 | 164 | /** 165 | * @brief Sets the WWDG counter value. 166 | * @param Counter: specifies the watchdog counter value. 167 | * This parameter must be a number between 0x40 and 0x7F. 168 | * @retval None 169 | */ 170 | void WWDG_SetCounter(uint8_t Counter) 171 | { 172 | /* Check the parameters */ 173 | assert_param(IS_WWDG_COUNTER(Counter)); 174 | /* Write to T[6:0] bits to configure the counter value, no need to do 175 | a read-modify-write; writing a 0 to WDGA bit does nothing */ 176 | WWDG->CR = Counter & BIT_Mask; 177 | } 178 | 179 | /** 180 | * @brief Enables WWDG and load the counter value. 181 | * @param Counter: specifies the watchdog counter value. 182 | * This parameter must be a number between 0x40 and 0x7F. 183 | * @retval None 184 | */ 185 | void WWDG_Enable(uint8_t Counter) 186 | { 187 | /* Check the parameters */ 188 | assert_param(IS_WWDG_COUNTER(Counter)); 189 | WWDG->CR = CR_WDGA_Set | Counter; 190 | } 191 | 192 | /** 193 | * @brief Checks whether the Early Wakeup interrupt flag is set or not. 194 | * @param None 195 | * @retval The new state of the Early Wakeup interrupt flag (SET or RESET) 196 | */ 197 | FlagStatus WWDG_GetFlagStatus(void) 198 | { 199 | return (FlagStatus)(WWDG->SR); 200 | } 201 | 202 | /** 203 | * @brief Clears Early Wakeup interrupt flag. 204 | * @param None 205 | * @retval None 206 | */ 207 | void WWDG_ClearFlag(void) 208 | { 209 | WWDG->SR = (uint32_t)RESET; 210 | } 211 | 212 | /** 213 | * @} 214 | */ 215 | 216 | /** 217 | * @} 218 | */ 219 | 220 | /** 221 | * @} 222 | */ 223 | 224 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 225 | -------------------------------------------------------------------------------- /code/SYSTEM/delay/delay.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/delay/delay.c -------------------------------------------------------------------------------- /code/SYSTEM/delay/delay.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/delay/delay.h -------------------------------------------------------------------------------- /code/SYSTEM/sys/sys.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/sys/sys.c -------------------------------------------------------------------------------- /code/SYSTEM/sys/sys.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/sys/sys.h -------------------------------------------------------------------------------- /code/SYSTEM/usart/usart.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/usart/usart.c -------------------------------------------------------------------------------- /code/SYSTEM/usart/usart.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/SYSTEM/usart/usart.h -------------------------------------------------------------------------------- /code/USB/CONFIG/hw_config.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/hw_config.c -------------------------------------------------------------------------------- /code/USB/CONFIG/hw_config.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : hw_config.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Hardware Configuration & Setup 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __HW_CONFIG_H 18 | #define __HW_CONFIG_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | //#include "stm32f10x_type.h" 22 | #include "stm32f10x.h" 23 | /* Exported types ------------------------------------------------------------*/ 24 | /* Exported constants --------------------------------------------------------*/ 25 | /* Exported macro ------------------------------------------------------------*/ 26 | /* Exported define -----------------------------------------------------------*/ 27 | #define BULK_MAX_PACKET_SIZE 0x00000040 28 | 29 | /* Exported functions ------------------------------------------------------- */ 30 | void Set_System(void); 31 | void Set_USBClock(void); 32 | void Enter_LowPowerMode(void); 33 | void Leave_LowPowerMode(void); 34 | void USB_Interrupts_Config(void); 35 | void Led_Config(void); 36 | void Led_RW_ON(void); 37 | void Led_RW_OFF(void); 38 | void USB_Configured_LED(void); 39 | void USB_NotConfigured_LED(void); 40 | void USB_Cable_Config (FunctionalState NewState); 41 | void USB_Disconnect_Config(void); 42 | void Get_SerialNum(void); 43 | void MAL_Config(void); 44 | /* External variables --------------------------------------------------------*/ 45 | 46 | #endif /*__HW_CONFIG_H*/ 47 | 48 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 49 | -------------------------------------------------------------------------------- /code/USB/CONFIG/mass_mal.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file mass_mal.c 4 | * @author MCD Application Team 5 | * @version V4.0.0 6 | * @date 21-January-2013 7 | * @brief Medium Access Layer interface 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | *

© COPYRIGHT 2013 STMicroelectronics

12 | * 13 | * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); 14 | * You may not use this file except in compliance with the License. 15 | * You may obtain a copy of the License at: 16 | * 17 | * http://www.st.com/software_license_agreement_liberty_v2 18 | * 19 | * Unless required by applicable law or agreed to in writing, software 20 | * distributed under the License is distributed on an "AS IS" BASIS, 21 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 22 | * See the License for the specific language governing permissions and 23 | * limitations under the License. 24 | * 25 | ****************************************************************************** 26 | */ 27 | 28 | 29 | /* Includes ------------------------------------------------------------------*/ 30 | #include "platform_config.h" 31 | #include "mass_mal.h" 32 | #include "stmflash.h" 33 | 34 | #include "mass_mal.h" 35 | #include "usart.h" 36 | #include "FAT16.h" 37 | 38 | #define FLASH_START_ADDR 0x08016000 // Flash start address 39 | #define FLASH_SIZE (100*1024*1024) // 100M 40 | #define FLASH_PAGE_SIZE (2*1024) // 2k Bytes per page 41 | #define FLASH_WAIT_TIMEOUT 100000 42 | 43 | /* Private typedef -----------------------------------------------------------*/ 44 | /* Private define ------------------------------------------------------------*/ 45 | /* Private macro -------------------------------------------------------------*/ 46 | /* Private variables ---------------------------------------------------------*/ 47 | uint32_t Mass_Memory_Size[1]; 48 | uint32_t Mass_Block_Size[1]; 49 | uint32_t Mass_Block_Count[1]; 50 | __IO uint32_t Status = 0; 51 | 52 | /* Private function prototypes -----------------------------------------------*/ 53 | /* Private functions ---------------------------------------------------------*/ 54 | /******************************************************************************* 55 | * Function Name : MAL_Init 56 | * Description : 57 | * Input : lun 58 | * Output : None 59 | * Return : None 60 | *******************************************************************************/ 61 | uint16_t MAL_Init(uint8_t lun) 62 | { 63 | uint16_t result = MAL_FAIL; 64 | 65 | if(0 == lun) 66 | { 67 | FLASH_Unlock(); 68 | result = MAL_OK; 69 | } 70 | 71 | return result; 72 | } 73 | /******************************************************************************* 74 | * Function Name : MAL_Write 75 | * Description : ??? 76 | * Input : None 77 | * Output : None 78 | * Return : None 79 | *******************************************************************************/ 80 | uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length) 81 | { 82 | uint16_t result = MAL_FAIL; 83 | 84 | if(0 == lun) 85 | { 86 | FATWriteLBA(Memory_Offset,(uint8_t*) Writebuff, (uint32_t) Transfer_Length); 87 | //STMFLASH_Write(FLASH_START_ADDR + Memory_Offset,(u16*)Writebuff,Transfer_Length/2); 88 | result = MAL_OK; 89 | } 90 | 91 | return result; 92 | } 93 | 94 | /******************************************************************************* 95 | * Function Name : MAL_Read 96 | * Description : ???? 97 | * Input : None 98 | * Output : None 99 | * Return : Buffer pointer 100 | *******************************************************************************/ 101 | uint16_t MAL_Read(uint8_t lun, uint32_t Memory_Offset, uint32_t *Readbuff, uint16_t Transfer_Length) 102 | { 103 | uint16_t result = MAL_FAIL; 104 | 105 | if(0 == lun) 106 | { 107 | if(0 == FATReadLBA(Memory_Offset,(uint8_t*)Readbuff, (uint32_t)Transfer_Length)) 108 | { 109 | STMFLASH_Read(FLASH_START_ADDR+Memory_Offset,(u16 *)Readbuff, Transfer_Length/2); 110 | } 111 | result = MAL_OK; 112 | } 113 | 114 | return result; 115 | } 116 | 117 | /******************************************************************************* 118 | * Function Name : MAL_GetStatus 119 | * Description : 120 | * Input : None 121 | * Output : None 122 | * Return : None 123 | *******************************************************************************/ 124 | uint16_t MAL_GetStatus (uint8_t lun) 125 | { 126 | uint16_t result = MAL_FAIL; 127 | 128 | if (lun == 0) 129 | { 130 | Mass_Block_Count[0] = FLASH_SIZE/FLASH_PAGE_SIZE; 131 | Mass_Block_Size[0] = FLASH_PAGE_SIZE; 132 | Mass_Memory_Size[0] = FLASH_SIZE; 133 | 134 | result = MAL_OK; 135 | } 136 | 137 | return result; 138 | } 139 | -------------------------------------------------------------------------------- /code/USB/CONFIG/mass_mal.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/mass_mal.h -------------------------------------------------------------------------------- /code/USB/CONFIG/memory.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/memory.c -------------------------------------------------------------------------------- /code/USB/CONFIG/memory.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/memory.h -------------------------------------------------------------------------------- /code/USB/CONFIG/msd.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/msd.c -------------------------------------------------------------------------------- /code/USB/CONFIG/platform_config.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : platform_config.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Evaluation board specific configuration file. 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __PLATFORM_CONFIG_H 18 | #define __PLATFORM_CONFIG_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | //#include "stm32f10x_type.h" 22 | #include "stm32f10x.h" 23 | #endif /* __PLATFORM_CONFIG_H */ 24 | 25 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 26 | -------------------------------------------------------------------------------- /code/USB/CONFIG/scsi_data.c: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : scsi_data.c 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Initialization of the SCSI data 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Includes ------------------------------------------------------------------*/ 17 | #include "usb_scsi.h" 18 | #include "memory.h" 19 | u8 Page00_Inquiry_Data[] = 20 | { 21 | 0x00, /* PERIPHERAL QUALIFIER & PERIPHERAL DEVICE TYPE*/ 22 | 0x00, 23 | 0x00, 24 | 0x00, 25 | 0x00 /* Supported Pages 00*/ 26 | }; 27 | u8 Standard_Inquiry_Data[] = 28 | { 29 | 0x00, /* Direct Access Device */ 30 | 0x80, /* RMB = 1: Removable Medium */ 31 | 0x02, /* Version: No conformance claim to standard */ 32 | 0x02, 33 | 34 | 36 - 4, /* Additional Length */ 35 | 0x00, /* SCCS = 1: Storage Controller Component */ 36 | 0x00, 37 | 0x00, 38 | /* Vendor Identification */ 39 | 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', 40 | /* Product Identification */ 41 | 'S', 'D', ' ', 'F', 'l', 'a', 's', 'h', ' ', 42 | 'D', 'i', 's', 'k', ' ', ' ', ' ', 43 | /* Product Revision Level */ 44 | '1', '.', '0', ' ' 45 | }; 46 | u8 Standard_Inquiry_Data2[] = 47 | { 48 | 0x00, /* Direct Access Device */ 49 | 0x80, /* RMB = 1: Removable Medium */ 50 | 0x02, /* Version: No conformance claim to standard */ 51 | 0x02, 52 | 53 | 36 - 4, /* Additional Length */ 54 | 0x00, /* SCCS = 1: Storage Controller Component */ 55 | 0x00, 56 | 0x00, 57 | /* Vendor Identification */ 58 | 'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', 59 | /* Product Identification */ 60 | 'N', 'A', 'N', 'D', ' ', 'F', 'l', 'a', 's', 'h', ' ', 61 | 'D', 'i', 's', 'k', ' ', 62 | /* Product Revision Level */ 63 | '1', '.', '0', ' ' 64 | }; 65 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 66 | u8 Mode_Sense6_data[] = 67 | { 68 | 0x03, 69 | 0x00, 70 | 0x00, 71 | 0x00, 72 | }; 73 | 74 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 75 | 76 | u8 Mode_Sense10_data[] = 77 | { 78 | 0x00, 79 | 0x06, 80 | 0x00, 81 | 0x00, 82 | 0x00, 83 | 0x00, 84 | 0x00, 85 | 0x00 86 | }; 87 | u8 Scsi_Sense_Data[] = 88 | { 89 | 0x70, /*RespCode*/ 90 | 0x00, /*SegmentNumber*/ 91 | NO_SENSE, /* Sens_Key*/ 92 | 0x00, 93 | 0x00, 94 | 0x00, 95 | 0x00, /*Information*/ 96 | 0x0A, /*AdditionalSenseLength*/ 97 | 0x00, 98 | 0x00, 99 | 0x00, 100 | 0x00, /*CmdInformation*/ 101 | NO_SENSE, /*Asc*/ 102 | 0x00, /*ASCQ*/ 103 | 0x00, /*FRUC*/ 104 | 0x00, /*TBD*/ 105 | 0x00, 106 | 0x00 /*SenseKeySpecific*/ 107 | }; 108 | u8 ReadCapacity10_Data[] = 109 | { 110 | /* Last Logical Block */ 111 | 0, 112 | 0, 113 | 0, 114 | 0, 115 | 116 | /* Block Length */ 117 | 0, 118 | 0, 119 | 0, 120 | 0 121 | }; 122 | 123 | u8 ReadFormatCapacity_Data [] = 124 | { 125 | 0x00, 126 | 0x00, 127 | 0x00, 128 | 0x08, /* Capacity List Length */ 129 | 130 | /* Block Count */ 131 | 0, 132 | 0, 133 | 0, 134 | 0, 135 | 136 | /* Block Length */ 137 | 0x02,/* Descriptor Code: Formatted Media */ 138 | 0, 139 | 0, 140 | 0 141 | }; 142 | 143 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 144 | -------------------------------------------------------------------------------- /code/USB/CONFIG/stm32f10x_it.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/stm32f10x_it.c -------------------------------------------------------------------------------- /code/USB/CONFIG/stm32f10x_it.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : stm32f10x_it.h 3 | * Author : MCD Application Team 4 | * Version : V2.0.1 5 | * Date : 06/13/2008 6 | * Description : This file contains the headers of the interrupt handlers. 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __STM32F10x_IT_H 18 | #define __STM32F10x_IT_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | #include 22 | 23 | /* Exported types ------------------------------------------------------------*/ 24 | /* Exported constants --------------------------------------------------------*/ 25 | /* Exported macro ------------------------------------------------------------*/ 26 | /* Exported functions ------------------------------------------------------- */ 27 | 28 | //void NMI_Handler(void) __attribute__ ((alias("NMIException"))); 29 | //void HardFault_Handler(void) __attribute__ ((alias("HardFaultException"))); 30 | //void MemManage_Handler(void) __attribute__ ((alias("MemManageException"))); 31 | //void BusFault_Handler(void) __attribute__ ((alias("BusFaultException"))); 32 | //void UsageFault_Handler(void) __attribute__ ((alias("UsageFaultException"))); 33 | //void DebugMon_Handler(void) __attribute__ ((alias("DebugMonitor"))); 34 | //void SVC_Handler(void) __attribute__ ((alias("SVCHandler"))); 35 | //void PendSV_Handler(void) __attribute__ ((alias("PendSVC"))); 36 | //void SysTick_Handler(void) __attribute__ ((alias("SysTickHandler"))); 37 | 38 | void NMIException(void); 39 | void HardFaultException(void); 40 | void MemManageException(void); 41 | void BusFaultException(void); 42 | void UsageFaultException(void); 43 | void DebugMonitor(void); 44 | void SVCHandler(void); 45 | void PendSVC(void); 46 | void SysTickHandler(void); 47 | void WWDG_IRQHandler(void); 48 | void PVD_IRQHandler(void); 49 | void TAMPER_IRQHandler(void); 50 | void RTC_IRQHandler(void); 51 | void FLASH_IRQHandler(void); 52 | void RCC_IRQHandler(void); 53 | void EXTI0_IRQHandler(void); 54 | void EXTI1_IRQHandler(void); 55 | void EXTI2_IRQHandler(void); 56 | void EXTI3_IRQHandler(void); 57 | void EXTI4_IRQHandler(void); 58 | void DMA1_Channel1_IRQHandler(void); 59 | void DMA1_Channel2_IRQHandler(void); 60 | void DMA1_Channel3_IRQHandler(void); 61 | void DMA1_Channel4_IRQHandler(void); 62 | void DMA1_Channel5_IRQHandler(void); 63 | void DMA1_Channel6_IRQHandler(void); 64 | void DMA1_Channel7_IRQHandler(void); 65 | void ADC1_2_IRQHandler(void); 66 | void USB_HP_CAN_TX_IRQHandler(void); 67 | void USB_LP_CAN_RX0_IRQHandler(void); 68 | void CAN_RX1_IRQHandler(void); 69 | void CAN_SCE_IRQHandler(void); 70 | void EXTI9_5_IRQHandler(void); 71 | void TIM1_BRK_IRQHandler(void); 72 | void TIM1_UP_IRQHandler(void); 73 | void TIM1_TRG_COM_IRQHandler(void); 74 | void TIM1_CC_IRQHandler(void); 75 | void TIM2_IRQHandler(void); 76 | void TIM3_IRQHandler(void); 77 | void TIM4_IRQHandler(void); 78 | void I2C1_EV_IRQHandler(void); 79 | void I2C1_ER_IRQHandler(void); 80 | void I2C2_EV_IRQHandler(void); 81 | void I2C2_ER_IRQHandler(void); 82 | void SPI1_IRQHandler(void); 83 | void SPI2_IRQHandler(void); 84 | void USART1_IRQHandler(void); 85 | void USART2_IRQHandler(void); 86 | void USART3_IRQHandler(void); 87 | void EXTI15_10_IRQHandler(void); 88 | void RTCAlarm_IRQHandler(void); 89 | void USBWakeUp_IRQHandler(void); 90 | void TIM8_BRK_IRQHandler(void); 91 | void TIM8_UP_IRQHandler(void); 92 | void TIM8_TRG_COM_IRQHandler(void); 93 | void TIM8_CC_IRQHandler(void); 94 | void ADC3_IRQHandler(void); 95 | void FSMC_IRQHandler(void); 96 | void SDIO_IRQHandler(void); 97 | void TIM5_IRQHandler(void); 98 | void SPI3_IRQHandler(void); 99 | void UART4_IRQHandler(void); 100 | void UART5_IRQHandler(void); 101 | void TIM6_IRQHandler(void); 102 | void TIM7_IRQHandler(void); 103 | void DMA2_Channel1_IRQHandler(void); 104 | void DMA2_Channel2_IRQHandler(void); 105 | void DMA2_Channel3_IRQHandler(void); 106 | void DMA2_Channel4_5_IRQHandler(void); 107 | 108 | #endif /* __STM32F10x_IT_H */ 109 | 110 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 111 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_bot.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/usb_bot.c -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_bot.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_bot.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : BOT State Machine management 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_BOT_H 18 | #define __USB_BOT_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | /* Exported types ------------------------------------------------------------*/ 22 | /* Bulk-only Command Block Wrapper */ 23 | 24 | typedef struct _Bulk_Only_CBW 25 | { 26 | u32 dSignature; 27 | u32 dTag; 28 | u32 dDataLength; 29 | u8 bmFlags; 30 | u8 bLUN; 31 | u8 bCBLength; 32 | u8 CB[16]; 33 | } 34 | Bulk_Only_CBW; 35 | 36 | /* Bulk-only Command Status Wrapper */ 37 | typedef struct _Bulk_Only_CSW 38 | { 39 | u32 dSignature; 40 | u32 dTag; 41 | u32 dDataResidue; 42 | u8 bStatus; 43 | } 44 | Bulk_Only_CSW; 45 | /* Exported constants --------------------------------------------------------*/ 46 | 47 | /*****************************************************************************/ 48 | /*********************** Bulk-Only Transfer State machine ********************/ 49 | /*****************************************************************************/ 50 | #define BOT_IDLE 0 /* Idle state */ 51 | #define BOT_DATA_OUT 1 /* Data Out state */ 52 | #define BOT_DATA_IN 2 /* Data In state */ 53 | #define BOT_DATA_IN_LAST 3 /* Last Data In Last */ 54 | #define BOT_CSW_Send 4 /* Command Status Wrapper */ 55 | #define BOT_ERROR 5 /* error state */ 56 | 57 | #define BOT_CBW_SIGNATURE 0x43425355 58 | #define BOT_CSW_SIGNATURE 0x53425355 59 | #define BOT_CBW_PACKET_LENGTH 31 60 | 61 | #define CSW_DATA_LENGTH 0x000D 62 | 63 | /* CSW Status Definitions */ 64 | #define CSW_CMD_PASSED 0x00 65 | #define CSW_CMD_FAILED 0x01 66 | #define CSW_PHASE_ERROR 0x02 67 | 68 | #define SEND_CSW_DISABLE 0 69 | #define SEND_CSW_ENABLE 1 70 | 71 | #define DIR_IN 0 72 | #define DIR_OUT 1 73 | #define BOTH_DIR 2 74 | 75 | /* Exported macro ------------------------------------------------------------*/ 76 | /* Exported functions ------------------------------------------------------- */ 77 | void Mass_Storage_In (void); 78 | void Mass_Storage_Out (void); 79 | void CBW_Decode(void); 80 | void Transfer_Data_Request(u8* Data_Pointer, u16 Data_Len); 81 | void Set_CSW (u8 CSW_Status, u8 Send_Permission); 82 | void Bot_Abort(u8 Direction); 83 | 84 | #endif /* __USB_BOT_H */ 85 | 86 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 87 | 88 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_conf.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_conf.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Mass Storage Demo configuration header 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | /* Define to prevent recursive inclusion -------------------------------------*/ 16 | #ifndef __USB_CONF_H 17 | #define __USB_CONF_H 18 | 19 | /*-------------------------------------------------------------*/ 20 | /* EP_NUM */ 21 | /* defines how many endpoints are used by the device */ 22 | /*-------------------------------------------------------------*/ 23 | #define EP_NUM (3) 24 | 25 | /*-------------------------------------------------------------*/ 26 | /* -------------- Buffer Description Table -----------------*/ 27 | /*-------------------------------------------------------------*/ 28 | /* buffer table base address */ 29 | 30 | #define BTABLE_ADDRESS (0x00) 31 | 32 | /* EP0 */ 33 | /* rx/tx buffer base address */ 34 | #define ENDP0_RXADDR (0x18) 35 | #define ENDP0_TXADDR (0x58) 36 | 37 | /* EP1 */ 38 | /* tx buffer base address */ 39 | #define ENDP1_TXADDR (0x98) 40 | 41 | /* EP2 */ 42 | /* Rx buffer base address */ 43 | #define ENDP2_RXADDR (0xD8) 44 | 45 | 46 | /* ISTR events */ 47 | /* IMR_MSK */ 48 | /* mask defining which events has to be handled */ 49 | /* by the device application software */ 50 | #define IMR_MSK (CNTR_CTRM | CNTR_RESETM) 51 | 52 | /* CTR service routines */ 53 | /* associated to defined endpoints */ 54 | //#define EP1_IN_Callback NOP_Process 55 | #define EP2_IN_Callback NOP_Process 56 | #define EP3_IN_Callback NOP_Process 57 | #define EP4_IN_Callback NOP_Process 58 | #define EP5_IN_Callback NOP_Process 59 | #define EP6_IN_Callback NOP_Process 60 | #define EP7_IN_Callback NOP_Process 61 | 62 | 63 | #define EP1_OUT_Callback NOP_Process 64 | //#define EP2_OUT_Callback NOP_Process 65 | #define EP3_OUT_Callback NOP_Process 66 | #define EP4_OUT_Callback NOP_Process 67 | #define EP5_OUT_Callback NOP_Process 68 | #define EP6_OUT_Callback NOP_Process 69 | #define EP7_OUT_Callback NOP_Process 70 | 71 | #endif /* __USB_CONF_H */ 72 | 73 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 74 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_desc.c: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_desc.c 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Descriptors for Mass Storage Device 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Includes ------------------------------------------------------------------*/ 17 | #include "usb_desc.h" 18 | 19 | const u8 MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC] = 20 | { 21 | 0x12, /* bLength */ 22 | 0x01, /* bDescriptorType */ 23 | 0x00, /* bcdUSB, version 2.00 */ 24 | 0x02, 25 | 0x00, /* bDeviceClass : each interface define the device class */ 26 | 0x00, /* bDeviceSubClass */ 27 | 0x00, /* bDeviceProtocol */ 28 | 0x40, /* bMaxPacketSize0 0x40 = 64 */ 29 | 0x84, /* idVendor (0483) */ 30 | 0x04, 31 | 0x22, /* idProduct */ 32 | 0x57, 33 | 0x00, /* bcdDevice 2.00*/ 34 | 0x02, 35 | 1, /* index of string Manufacturer */ 36 | /**/ 37 | 2, /* index of string descriptor of product*/ 38 | /* */ 39 | 3, /* */ 40 | /* */ 41 | /* */ 42 | 0x01 /*bNumConfigurations */ 43 | }; 44 | const u8 MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC] = 45 | { 46 | 47 | 0x09, /* bLength: Configuation Descriptor size */ 48 | 0x02, /* bDescriptorType: Configuration */ 49 | MASS_SIZ_CONFIG_DESC, 50 | 51 | 0x00, 52 | 0x01, /* bNumInterfaces: 1 interface */ 53 | 0x01, /* bConfigurationValue: */ 54 | /* Configuration value */ 55 | 0x00, /* iConfiguration: */ 56 | /* Index of string descriptor */ 57 | /* describing the configuration */ 58 | 0xC0, /* bmAttributes: */ 59 | /* bus powered */ 60 | 0xFA, /* MaxPower 500 mA */ 61 | 62 | /******************** Descriptor of Mass Storage interface ********************/ 63 | /* 09 */ 64 | 0x09, /* bLength: Interface Descriptor size */ 65 | 0x04, /* bDescriptorType: */ 66 | /* Interface descriptor type */ 67 | 0x00, /* bInterfaceNumber: Number of Interface */ 68 | 0x00, /* bAlternateSetting: Alternate setting */ 69 | 0x02, /* bNumEndpoints*/ 70 | 0x08, /* bInterfaceClass: MASS STORAGE Class */ 71 | 0x06, /* bInterfaceSubClass : SCSI transparent*/ 72 | 0x50, /* nInterfaceProtocol */ 73 | 4, /* iInterface: */ 74 | /* 18 */ 75 | 0x07, /*Endpoint descriptor length = 7*/ 76 | 0x05, /*Endpoint descriptor type */ 77 | 0x81, /*Endpoint address (IN, address 1) */ 78 | 0x02, /*Bulk endpoint type */ 79 | 0x40, /*Maximum packet size (64 bytes) */ 80 | 0x00, 81 | 0x00, /*Polling interval in milliseconds */ 82 | /* 25 */ 83 | 0x07, /*Endpoint descriptor length = 7 */ 84 | 0x05, /*Endpoint descriptor type */ 85 | 0x02, /*Endpoint address (OUT, address 2) */ 86 | 0x02, /*Bulk endpoint type */ 87 | 0x40, /*Maximum packet size (64 bytes) */ 88 | 0x00, 89 | 0x00 /*Polling interval in milliseconds*/ 90 | /*32*/ 91 | }; 92 | const u8 MASS_StringLangID[MASS_SIZ_STRING_LANGID] = 93 | { 94 | MASS_SIZ_STRING_LANGID, 95 | 0x03, 96 | 0x09, 97 | 0x04 98 | } 99 | ; /* LangID = 0x0409: U.S. English */ 100 | const u8 MASS_StringVendor[MASS_SIZ_STRING_VENDOR] = 101 | { 102 | MASS_SIZ_STRING_VENDOR, /* Size of manufaturer string */ 103 | 0x03, /* bDescriptorType = String descriptor */ 104 | /* Manufacturer: IoT-Sudio*/ 105 | 'I',0,//I 106 | 'o',0,//o 107 | 'T',0,//T 108 | '-',0,//- 109 | 'S',0,//S 110 | 't',0,//t 111 | 'u',0,//u 112 | 'd',0,//d 113 | 'i',0,//i 114 | 'o',0,//o 115 | }; 116 | const u8 MASS_StringProduct[MASS_SIZ_STRING_PRODUCT] = 117 | { 118 | MASS_SIZ_STRING_PRODUCT, 119 | 0x03, 120 | /* Product name: USB MSD Bootloader */ 121 | 'U', 0, 'S', 0, 'B', 0, ' ', 0, 'M', 0, 'S', 0, 'D', 0, 'B', 0, 'o', 0, 'o', 0, 122 | 't', 0, ' ', 0, 'L', 0, 'o', 0, 'a', 0, 'd', 0, 'e', 0, 'r', 0, 123 | }; 124 | 125 | u8 MASS_StringSerial[MASS_SIZ_STRING_SERIAL] = 126 | { 127 | MASS_SIZ_STRING_SERIAL, 128 | 0x03, 129 | /* Serial number*/ 130 | 'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, ' ', 0 131 | }; 132 | const u8 MASS_StringInterface[MASS_SIZ_STRING_INTERFACE] = 133 | { 134 | MASS_SIZ_STRING_INTERFACE, 135 | 0x03, 136 | /* Interface 0: "ST Mass" */ 137 | 'S', 0, 'T', 0, ' ', 0, 'M', 0, 'a', 0, 's', 0, 's', 0 138 | }; 139 | 140 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 141 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_desc.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_desc.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Descriptor Header for Mass Storage Device 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_DESC_H 18 | #define __USB_DESC_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | //#include "stm32f10x_type.h" 22 | #include "stm32f10x.h" 23 | /* Exported types ------------------------------------------------------------*/ 24 | /* Exported constants --------------------------------------------------------*/ 25 | /* Exported macro ------------------------------------------------------------*/ 26 | /* Exported define -----------------------------------------------------------*/ 27 | #define MASS_SIZ_DEVICE_DESC 18 28 | #define MASS_SIZ_CONFIG_DESC 32 29 | 30 | #define MASS_SIZ_STRING_LANGID 4 31 | #define MASS_SIZ_STRING_VENDOR 22 32 | #define MASS_SIZ_STRING_PRODUCT 38 33 | #define MASS_SIZ_STRING_SERIAL 26 34 | #define MASS_SIZ_STRING_INTERFACE 16 35 | 36 | /* Exported functions ------------------------------------------------------- */ 37 | extern const u8 MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC]; 38 | extern const u8 MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC]; 39 | 40 | extern const u8 MASS_StringLangID[MASS_SIZ_STRING_LANGID]; 41 | extern const u8 MASS_StringVendor[MASS_SIZ_STRING_VENDOR]; 42 | extern const u8 MASS_StringProduct[MASS_SIZ_STRING_PRODUCT]; 43 | extern u8 MASS_StringSerial[MASS_SIZ_STRING_SERIAL]; 44 | extern const u8 MASS_StringInterface[MASS_SIZ_STRING_INTERFACE]; 45 | 46 | #endif /* __USB_DESC_H */ 47 | 48 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 49 | 50 | 51 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_endp.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/usb_endp.c -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_istr.c: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_istr.c 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : ISTR events interrupt service routines 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Includes ------------------------------------------------------------------*/ 17 | #include "usb_type.h" 18 | #include "usb_regs.h" 19 | #include "usb_pwr.h" 20 | #include "usb_istr.h" 21 | #include "usb_init.h" 22 | #include "usb_int.h" 23 | 24 | /* Private typedef -----------------------------------------------------------*/ 25 | /* Private define ------------------------------------------------------------*/ 26 | /* Private macro -------------------------------------------------------------*/ 27 | /* Private variables ---------------------------------------------------------*/ 28 | volatile u16 wIstr; /* ISTR register last read value */ 29 | volatile u8 bIntPackSOF = 0; /* SOFs received between 2 consecutive packets */ 30 | 31 | /* Extern variables ----------------------------------------------------------*/ 32 | /* Private function prototypes -----------------------------------------------*/ 33 | /* Private functions ---------------------------------------------------------*/ 34 | /* function pointers to non-control endpoints service routines */ 35 | void (*pEpInt_IN[7])(void) = 36 | { 37 | EP1_IN_Callback, 38 | EP2_IN_Callback, 39 | EP3_IN_Callback, 40 | EP4_IN_Callback, 41 | EP5_IN_Callback, 42 | EP6_IN_Callback, 43 | EP7_IN_Callback, 44 | }; 45 | 46 | void (*pEpInt_OUT[7])(void) = 47 | { 48 | EP1_OUT_Callback, 49 | EP2_OUT_Callback, 50 | EP3_OUT_Callback, 51 | EP4_OUT_Callback, 52 | EP5_OUT_Callback, 53 | EP6_OUT_Callback, 54 | EP7_OUT_Callback, 55 | }; 56 | 57 | 58 | /******************************************************************************* 59 | * Function Name : USB_Istr 60 | * Description : ISTR events interrupt service routine 61 | * Input : None. 62 | * Output : None. 63 | * Return : None. 64 | *******************************************************************************/ 65 | void USB_Istr(void) 66 | { 67 | 68 | wIstr = _GetISTR(); 69 | 70 | #if (IMR_MSK & ISTR_RESET) 71 | if (wIstr & ISTR_RESET & wInterrupt_Mask) 72 | { 73 | _SetISTR((u16)CLR_RESET); 74 | Device_Property.Reset(); 75 | #ifdef RESET_CALLBACK 76 | RESET_Callback(); 77 | #endif 78 | } 79 | #endif 80 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 81 | #if (IMR_MSK & ISTR_DOVR) 82 | if (wIstr & ISTR_DOVR & wInterrupt_Mask) 83 | { 84 | _SetISTR((u16)CLR_DOVR); 85 | #ifdef DOVR_CALLBACK 86 | DOVR_Callback(); 87 | #endif 88 | } 89 | #endif 90 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 91 | #if (IMR_MSK & ISTR_ERR) 92 | if (wIstr & ISTR_ERR & wInterrupt_Mask) 93 | { 94 | _SetISTR((u16)CLR_ERR); 95 | #ifdef ERR_CALLBACK 96 | ERR_Callback(); 97 | #endif 98 | } 99 | #endif 100 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 101 | #if (IMR_MSK & ISTR_WKUP) 102 | if (wIstr & ISTR_WKUP & wInterrupt_Mask) 103 | { 104 | _SetISTR((u16)CLR_WKUP); 105 | Resume(RESUME_EXTERNAL); 106 | #ifdef WKUP_CALLBACK 107 | WKUP_Callback(); 108 | #endif 109 | } 110 | #endif 111 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 112 | #if (IMR_MSK & ISTR_SUSP) 113 | if (wIstr & ISTR_SUSP & wInterrupt_Mask) 114 | { 115 | 116 | /* check if SUSPEND is possible */ 117 | if (fSuspendEnabled) 118 | { 119 | Suspend(); 120 | } 121 | else 122 | { 123 | /* if not possible then resume after xx ms */ 124 | Resume(RESUME_LATER); 125 | } 126 | /* clear of the ISTR bit must be done after setting of CNTR_FSUSP */ 127 | _SetISTR((u16)CLR_SUSP); 128 | #ifdef SUSP_CALLBACK 129 | SUSP_Callback(); 130 | #endif 131 | } 132 | #endif 133 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 134 | #if (IMR_MSK & ISTR_SOF) 135 | if (wIstr & ISTR_SOF & wInterrupt_Mask) 136 | { 137 | _SetISTR((u16)CLR_SOF); 138 | bIntPackSOF++; 139 | 140 | #ifdef SOF_CALLBACK 141 | SOF_Callback(); 142 | #endif 143 | } 144 | #endif 145 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 146 | #if (IMR_MSK & ISTR_ESOF) 147 | if (wIstr & ISTR_ESOF & wInterrupt_Mask) 148 | { 149 | _SetISTR((u16)CLR_ESOF); 150 | /* resume handling timing is made with ESOFs */ 151 | Resume(RESUME_ESOF); /* request without change of the machine state */ 152 | 153 | #ifdef ESOF_CALLBACK 154 | ESOF_Callback(); 155 | #endif 156 | } 157 | #endif 158 | /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 159 | #if (IMR_MSK & ISTR_CTR) 160 | if (wIstr & ISTR_CTR & wInterrupt_Mask) 161 | { 162 | /* servicing of the endpoint correct transfer interrupt */ 163 | /* clear of the CTR flag into the sub */ 164 | CTR_LP(); 165 | #ifdef CTR_CALLBACK 166 | CTR_Callback(); 167 | #endif 168 | } 169 | #endif 170 | } /* USB_Istr */ 171 | 172 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 173 | 174 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_istr.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_istr.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : This file includes the peripherals header files in the 7 | * user application. 8 | ******************************************************************************** 9 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 10 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 11 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 12 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 13 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 14 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 15 | *******************************************************************************/ 16 | 17 | /* Define to prevent recursive inclusion -------------------------------------*/ 18 | #ifndef __USB_ISTR_H 19 | #define __USB_ISTR_H 20 | 21 | /* Includes ------------------------------------------------------------------*/ 22 | #include "usb_conf.h" 23 | 24 | /* Exported types ------------------------------------------------------------*/ 25 | /* Exported constants --------------------------------------------------------*/ 26 | /* Exported macro ------------------------------------------------------------*/ 27 | /* Exported functions ------------------------------------------------------- */ 28 | void USB_Istr(void); 29 | /* function prototypes Automatically built defining related macros */ 30 | 31 | #ifdef CTR_CALLBACK 32 | void CTR_Callback(void); 33 | #endif 34 | 35 | #ifdef DOVR_CALLBACK 36 | void DOVR_Callback(void); 37 | #endif 38 | 39 | #ifdef ERR_CALLBACK 40 | void ERR_Callback(void); 41 | #endif 42 | 43 | #ifdef WKUP_CALLBACK 44 | void WKUP_Callback(void); 45 | #endif 46 | 47 | #ifdef SUSP_CALLBACK 48 | void SUSP_Callback(void); 49 | #endif 50 | 51 | #ifdef RESET_CALLBACK 52 | void RESET_Callback(void); 53 | #endif 54 | 55 | #ifdef SOF_CALLBACK 56 | void SOF_Callback(void); 57 | #endif 58 | 59 | #ifdef ESOF_CALLBACK 60 | void ESOF_Callback(void); 61 | #endif 62 | 63 | void EP1_IN_Callback(void); 64 | void EP2_IN_Callback(void); 65 | void EP3_IN_Callback(void); 66 | void EP4_IN_Callback(void); 67 | void EP5_IN_Callback(void); 68 | void EP6_IN_Callback(void); 69 | void EP7_IN_Callback(void); 70 | 71 | void EP1_OUT_Callback(void); 72 | void EP2_OUT_Callback(void); 73 | void EP3_OUT_Callback(void); 74 | void EP4_OUT_Callback(void); 75 | void EP5_OUT_Callback(void); 76 | void EP6_OUT_Callback(void); 77 | void EP7_OUT_Callback(void); 78 | 79 | #endif /*__USB_ISTR_H*/ 80 | 81 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 82 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_prop.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/CONFIG/usb_prop.c -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_prop.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_prop.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : All processing related to Mass Storage Demo (Endpoint 0) 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __usb_prop_H 18 | #define __usb_prop_H 19 | /* Includes ------------------------------------------------------------------*/ 20 | /* Exported types ------------------------------------------------------------*/ 21 | //#include "stm32f10x_type.h" 22 | #include "stm32f10x.h" 23 | /* Exported constants --------------------------------------------------------*/ 24 | #define Mass_Storage_GetConfiguration NOP_Process 25 | /* #define Mass_Storage_SetConfiguration NOP_Process*/ 26 | #define Mass_Storage_GetInterface NOP_Process 27 | #define Mass_Storage_SetInterface NOP_Process 28 | #define Mass_Storage_GetStatus NOP_Process 29 | /* #define Mass_Storage_ClearFeature NOP_Process*/ 30 | #define Mass_Storage_SetEndPointFeature NOP_Process 31 | #define Mass_Storage_SetDeviceFeature NOP_Process 32 | /*#define Mass_Storage_SetDeviceAddress NOP_Process*/ 33 | 34 | /* MASS Storage Requests*/ 35 | #define GET_MAX_LUN 0xFE 36 | #define MASS_STORAGE_RESET 0xFF 37 | #define LUN_DATA_LENGTH 1 38 | 39 | /* Exported macro ------------------------------------------------------------*/ 40 | /* Exported functions ------------------------------------------------------- */ 41 | void MASS_init(void); 42 | void MASS_Reset(void); 43 | void Mass_Storage_SetConfiguration(void); 44 | void Mass_Storage_ClearFeature(void); 45 | void Mass_Storage_SetDeviceAddress (void); 46 | void MASS_Status_In (void); 47 | void MASS_Status_Out (void); 48 | RESULT MASS_Data_Setup(u8); 49 | RESULT MASS_NoData_Setup(u8); 50 | RESULT MASS_Get_Interface_Setting(u8 Interface, u8 AlternateSetting); 51 | u8 *MASS_GetDeviceDescriptor(u16 ); 52 | u8 *MASS_GetConfigDescriptor(u16); 53 | u8 *MASS_GetStringDescriptor(u16); 54 | u8 *Get_Max_Lun(u16 Length); 55 | 56 | #endif /* __usb_prop_H */ 57 | 58 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 59 | 60 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_pwr.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_pwr.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Connection/disconnection & power management header 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | /* Define to prevent recursive inclusion -------------------------------------*/ 16 | #ifndef __USB_PWR_H 17 | #define __USB_PWR_H 18 | /* Includes ------------------------------------------------------------------*/ 19 | #include "usb_core.h" 20 | /* Exported types ------------------------------------------------------------*/ 21 | typedef enum _RESUME_STATE 22 | { 23 | RESUME_EXTERNAL, 24 | RESUME_INTERNAL, 25 | RESUME_LATER, 26 | RESUME_WAIT, 27 | RESUME_START, 28 | RESUME_ON, 29 | RESUME_OFF, 30 | RESUME_ESOF 31 | } RESUME_STATE; 32 | 33 | typedef enum _DEVICE_STATE 34 | { 35 | UNCONNECTED, 36 | ATTACHED, 37 | POWERED, 38 | SUSPENDED, 39 | ADDRESSED, 40 | CONFIGURED 41 | } DEVICE_STATE; 42 | 43 | /* Exported constants --------------------------------------------------------*/ 44 | /* Exported macro ------------------------------------------------------------*/ 45 | /* Exported functions ------------------------------------------------------- */ 46 | void Suspend(void); 47 | void Resume_Init(void); 48 | void Resume(RESUME_STATE eResumeSetVal); 49 | RESULT PowerOn(void); 50 | RESULT PowerOff(void); 51 | 52 | /* External variables --------------------------------------------------------*/ 53 | extern vu32 bDeviceState; /* USB device status */ 54 | extern volatile bool fSuspendEnabled; /* true when suspend is possible */ 55 | 56 | #endif /*__USB_PWR_H*/ 57 | 58 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 59 | -------------------------------------------------------------------------------- /code/USB/CONFIG/usb_scsi.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_scsi.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : All processing related to the SCSI commands 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_SCSI_H 18 | #define __USB_SCSI_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | //#include 22 | #include "stm32f10x.h" 23 | /* Exported types ------------------------------------------------------------*/ 24 | /* Exported constants --------------------------------------------------------*/ 25 | 26 | /* SCSI Commands */ 27 | #define SCSI_FORMAT_UNIT 0x04 28 | #define SCSI_INQUIRY 0x12 29 | #define SCSI_MODE_SELECT6 0x15 30 | #define SCSI_MODE_SELECT10 0x55 31 | #define SCSI_MODE_SENSE6 0x1A 32 | #define SCSI_MODE_SENSE10 0x5A 33 | #define SCSI_ALLOW_MEDIUM_REMOVAL 0x1E 34 | #define SCSI_READ6 0x08 35 | #define SCSI_READ10 0x28 36 | #define SCSI_READ12 0xA8 37 | #define SCSI_READ16 0x88 38 | 39 | #define SCSI_READ_CAPACITY10 0x25 40 | #define SCSI_READ_CAPACITY16 0x9E 41 | 42 | #define SCSI_REQUEST_SENSE 0x03 43 | #define SCSI_START_STOP_UNIT 0x1B 44 | #define SCSI_TEST_UNIT_READY 0x00 45 | #define SCSI_WRITE6 0x0A 46 | #define SCSI_WRITE10 0x2A 47 | #define SCSI_WRITE12 0xAA 48 | #define SCSI_WRITE16 0x8A 49 | 50 | #define SCSI_VERIFY10 0x2F 51 | #define SCSI_VERIFY12 0xAF 52 | #define SCSI_VERIFY16 0x8F 53 | 54 | #define SCSI_SEND_DIAGNOSTIC 0x1D 55 | #define SCSI_READ_FORMAT_CAPACITIES 0x23 56 | 57 | #define NO_SENSE 0 58 | #define RECOVERED_ERROR 1 59 | #define NOT_READY 2 60 | #define MEDIUM_ERROR 3 61 | #define HARDWARE_ERROR 4 62 | #define ILLEGAL_REQUEST 5 63 | #define UNIT_ATTENTION 6 64 | #define DATA_PROTECT 7 65 | #define BLANK_CHECK 8 66 | #define VENDOR_SPECIFIC 9 67 | #define COPY_ABORTED 10 68 | #define ABORTED_COMMAND 11 69 | #define VOLUME_OVERFLOW 13 70 | #define MISCOMPARE 14 71 | 72 | 73 | #define INVALID_COMMAND 0x20 74 | #define INVALID_FIELED_IN_COMMAND 0x24 75 | #define PARAMETER_LIST_LENGTH_ERROR 0x1A 76 | #define INVALID_FIELD_IN_PARAMETER_LIST 0x26 77 | #define ADDRESS_OUT_OF_RANGE 0x21 78 | #define MEDIUM_NOT_PRESENT 0x3A 79 | #define MEDIUM_HAVE_CHANGED 0x28 80 | 81 | #define READ_FORMAT_CAPACITY_DATA_LEN 0x0C 82 | #define READ_CAPACITY10_DATA_LEN 0x08 83 | #define MODE_SENSE10_DATA_LEN 0x08 84 | #define MODE_SENSE6_DATA_LEN 0x04 85 | #define REQUEST_SENSE_DATA_LEN 0x12 86 | #define STANDARD_INQUIRY_DATA_LEN 0x24 87 | #define BLKVFY 0x04 88 | 89 | extern u8 Page00_Inquiry_Data[]; 90 | extern u8 Standard_Inquiry_Data[]; 91 | extern u8 Standard_Inquiry_Data2[]; 92 | extern u8 Mode_Sense6_data[]; 93 | extern u8 Mode_Sense10_data[]; 94 | extern u8 Scsi_Sense_Data[]; 95 | extern u8 ReadCapacity10_Data[]; 96 | extern u8 ReadFormatCapacity_Data []; 97 | 98 | /* Exported macro ------------------------------------------------------------*/ 99 | /* Exported functions ------------------------------------------------------- */ 100 | void SCSI_Inquiry_Cmd(u8 lun); 101 | void SCSI_ReadFormatCapacity_Cmd(u8 lun); 102 | void SCSI_ReadCapacity10_Cmd(u8 lun); 103 | void SCSI_RequestSense_Cmd (u8 lun); 104 | void SCSI_Start_Stop_Unit_Cmd(u8 lun); 105 | void SCSI_ModeSense6_Cmd (u8 lun); 106 | void SCSI_ModeSense10_Cmd (u8 lun); 107 | void SCSI_Write10_Cmd(u8 lun , u32 LBA , u32 BlockNbr); 108 | void SCSI_Read10_Cmd(u8 lun , u32 LBA , u32 BlockNbr); 109 | void SCSI_Verify10_Cmd(u8 lun); 110 | 111 | void SCSI_Invalid_Cmd(u8 lun); 112 | void SCSI_Valid_Cmd(u8 lun); 113 | bool SCSI_Address_Management(u8 lun , u8 Cmd , u32 LBA , u32 BlockNbr); 114 | 115 | void Set_Scsi_Sense_Data(u8 lun , u8 Sens_Key, u8 Asc); 116 | void SCSI_TestUnitReady_Cmd (u8 lun); 117 | void SCSI_Format_Cmd (u8 lun); 118 | 119 | //#define SCSI_TestUnitReady_Cmd SCSI_Valid_Cmd 120 | #define SCSI_Prevent_Removal_Cmd SCSI_Valid_Cmd 121 | 122 | /* Invalid (Unsupported) commands */ 123 | #define SCSI_READ_CAPACITY16_Cmd SCSI_Invalid_Cmd 124 | //#define SCSI_FormatUnit_Cmd SCSI_Invalid_Cmd 125 | #define SCSI_Write6_Cmd SCSI_Invalid_Cmd 126 | #define SCSI_Write16_Cmd SCSI_Invalid_Cmd 127 | #define SCSI_Write12_Cmd SCSI_Invalid_Cmd 128 | #define SCSI_Read6_Cmd SCSI_Invalid_Cmd 129 | #define SCSI_Read12_Cmd SCSI_Invalid_Cmd 130 | #define SCSI_Read16_Cmd SCSI_Invalid_Cmd 131 | #define SCSI_Send_Diagnostic_Cmd SCSI_Invalid_Cmd 132 | #define SCSI_Mode_Select6_Cmd SCSI_Invalid_Cmd 133 | #define SCSI_Mode_Select10_Cmd SCSI_Invalid_Cmd 134 | #define SCSI_Verify12_Cmd SCSI_Invalid_Cmd 135 | #define SCSI_Verify16_Cmd SCSI_Invalid_Cmd 136 | 137 | #endif /* __USB_SCSI_H */ 138 | 139 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 140 | 141 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_def.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_def.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Definitions related to USB Core 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_DEF_H 18 | #define __USB_DEF_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | /* Exported types ------------------------------------------------------------*/ 22 | typedef enum _RECIPIENT_TYPE 23 | { 24 | DEVICE_RECIPIENT, /* Recipient device */ 25 | INTERFACE_RECIPIENT, /* Recipient interface */ 26 | ENDPOINT_RECIPIENT, /* Recipient endpoint */ 27 | OTHER_RECIPIENT 28 | } RECIPIENT_TYPE; 29 | 30 | 31 | typedef enum _STANDARD_REQUESTS 32 | { 33 | GET_STATUS = 0, 34 | CLEAR_FEATURE, 35 | RESERVED1, 36 | SET_FEATURE, 37 | RESERVED2, 38 | SET_ADDRESS, 39 | GET_DESCRIPTOR, 40 | SET_DESCRIPTOR, 41 | GET_CONFIGURATION, 42 | SET_CONFIGURATION, 43 | GET_INTERFACE, 44 | SET_INTERFACE, 45 | TOTAL_sREQUEST, /* Total number of Standard request */ 46 | SYNCH_FRAME = 12 47 | } STANDARD_REQUESTS; 48 | 49 | /* Definition of "USBwValue" */ 50 | typedef enum _DESCRIPTOR_TYPE 51 | { 52 | DEVICE_DESCRIPTOR = 1, 53 | CONFIG_DESCRIPTOR, 54 | STRING_DESCRIPTOR, 55 | INTERFACE_DESCRIPTOR, 56 | ENDPOINT_DESCRIPTOR 57 | } DESCRIPTOR_TYPE; 58 | 59 | /* Feature selector of a SET_FEATURE or CLEAR_FEATURE */ 60 | typedef enum _FEATURE_SELECTOR 61 | { 62 | ENDPOINT_STALL, 63 | DEVICE_REMOTE_WAKEUP 64 | } FEATURE_SELECTOR; 65 | 66 | /* Exported constants --------------------------------------------------------*/ 67 | /* Definition of "USBbmRequestType" */ 68 | #define REQUEST_TYPE 0x60 /* Mask to get request type */ 69 | #define STANDARD_REQUEST 0x00 /* Standard request */ 70 | #define CLASS_REQUEST 0x20 /* Class request */ 71 | #define VENDOR_REQUEST 0x40 /* Vendor request */ 72 | 73 | #define RECIPIENT 0x1F /* Mask to get recipient */ 74 | 75 | /* Exported macro ------------------------------------------------------------*/ 76 | /* Exported functions ------------------------------------------------------- */ 77 | 78 | #endif /* __USB_DEF_H */ 79 | 80 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 81 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_init.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USB/LIB/usb_init.c -------------------------------------------------------------------------------- /code/USB/LIB/usb_init.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_init.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Initialization routines & global variables 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_INIT_H 18 | #define __USB_INIT_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | /* Exported types ------------------------------------------------------------*/ 22 | /* Exported constants --------------------------------------------------------*/ 23 | /* Exported macro ------------------------------------------------------------*/ 24 | /* Exported functions ------------------------------------------------------- */ 25 | void USB_Init(void); 26 | 27 | /* External variables --------------------------------------------------------*/ 28 | /* The number of current endpoint, it will be used to specify an endpoint */ 29 | extern u8 EPindex; 30 | /* The number of current device, it is an index to the Device_Table */ 31 | /*extern u8 Device_no; */ 32 | /* Points to the DEVICE_INFO structure of current device */ 33 | /* The purpose of this register is to speed up the execution */ 34 | extern DEVICE_INFO* pInformation; 35 | /* Points to the DEVICE_PROP structure of current device */ 36 | /* The purpose of this register is to speed up the execution */ 37 | extern DEVICE_PROP* pProperty; 38 | /* Temporary save the state of Rx & Tx status. */ 39 | /* Whenever the Rx or Tx state is changed, its value is saved */ 40 | /* in this variable first and will be set to the EPRB or EPRA */ 41 | /* at the end of interrupt process */ 42 | extern USER_STANDARD_REQUESTS *pUser_Standard_Requests; 43 | 44 | extern u16 SaveState ; 45 | extern u16 wInterrupt_Mask; 46 | 47 | #endif /* __USB_INIT_H */ 48 | 49 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 50 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_int.c: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_int.c 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Endpoint CTR (Low and High) interrupt's service routines 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Includes ------------------------------------------------------------------*/ 17 | #include "usb_lib.h" 18 | 19 | /* Private typedef -----------------------------------------------------------*/ 20 | /* Private define ------------------------------------------------------------*/ 21 | /* Private macro -------------------------------------------------------------*/ 22 | /* Private variables ---------------------------------------------------------*/ 23 | u16 SaveRState; 24 | u16 SaveTState; 25 | 26 | /* Extern variables ----------------------------------------------------------*/ 27 | extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */ 28 | extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */ 29 | 30 | /* Private function prototypes -----------------------------------------------*/ 31 | /* Private functions ---------------------------------------------------------*/ 32 | 33 | /******************************************************************************* 34 | * Function Name : CTR_LP. 35 | * Description : Low priority Endpoint Correct Transfer interrupt's service 36 | * routine. 37 | * Input : None. 38 | * Output : None. 39 | * Return : None. 40 | *******************************************************************************/ 41 | void CTR_LP(void) 42 | { 43 | u32 wEPVal = 0; 44 | /* stay in loop while pending ints */ 45 | while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) 46 | { 47 | _SetISTR((u16)CLR_CTR); /* clear CTR flag */ 48 | /* extract highest priority endpoint number */ 49 | EPindex = (u8)(wIstr & ISTR_EP_ID); 50 | if (EPindex == 0) 51 | { 52 | /* Decode and service control endpoint interrupt */ 53 | /* calling related service routine */ 54 | /* (Setup0_Process, In0_Process, Out0_Process) */ 55 | 56 | /* save RX & TX status */ 57 | /* and set both to NAK */ 58 | SaveRState = _GetEPRxStatus(ENDP0); 59 | SaveTState = _GetEPTxStatus(ENDP0); 60 | _SetEPRxStatus(ENDP0, EP_RX_NAK); 61 | _SetEPTxStatus(ENDP0, EP_TX_NAK); 62 | 63 | 64 | /* DIR bit = origin of the interrupt */ 65 | 66 | if ((wIstr & ISTR_DIR) == 0) 67 | { 68 | /* DIR = 0 */ 69 | 70 | /* DIR = 0 => IN int */ 71 | /* DIR = 0 implies that (EP_CTR_TX = 1) always */ 72 | //printf("in\n"); 73 | 74 | _ClearEP_CTR_TX(ENDP0); 75 | In0_Process(); 76 | 77 | /* before terminate set Tx & Rx status */ 78 | _SetEPRxStatus(ENDP0, SaveRState); 79 | _SetEPTxStatus(ENDP0, SaveTState); 80 | return; 81 | } 82 | else 83 | { 84 | /* DIR = 1 */ 85 | 86 | /* DIR = 1 & CTR_RX => SETUP or OUT int */ 87 | /* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */ 88 | //printf("out\n"); 89 | 90 | wEPVal = _GetENDPOINT(ENDP0); 91 | if ((wEPVal & EP_CTR_TX) != 0) 92 | { 93 | _ClearEP_CTR_TX(ENDP0); 94 | In0_Process(); 95 | /* before terminate set Tx & Rx status */ 96 | _SetEPRxStatus(ENDP0, SaveRState); 97 | _SetEPTxStatus(ENDP0, SaveTState); 98 | return; 99 | } 100 | else if ((wEPVal &EP_SETUP) != 0) 101 | { 102 | _ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */ 103 | Setup0_Process(); 104 | /* before terminate set Tx & Rx status */ 105 | _SetEPRxStatus(ENDP0, SaveRState); 106 | _SetEPTxStatus(ENDP0, SaveTState); 107 | return; 108 | } 109 | 110 | else if ((wEPVal & EP_CTR_RX) != 0) 111 | { 112 | _ClearEP_CTR_RX(ENDP0); 113 | Out0_Process(); 114 | /* before terminate set Tx & Rx status */ 115 | _SetEPRxStatus(ENDP0, SaveRState); 116 | _SetEPTxStatus(ENDP0, SaveTState); 117 | return; 118 | } 119 | } 120 | }/* if(EPindex == 0) */ 121 | else 122 | { 123 | /* Decode and service non control endpoints interrupt */ 124 | 125 | /* process related endpoint register */ 126 | wEPVal = _GetENDPOINT(EPindex); 127 | if ((wEPVal & EP_CTR_RX) != 0) 128 | { 129 | /* clear int flag */ 130 | _ClearEP_CTR_RX(EPindex); 131 | 132 | /* call OUT service function */ 133 | (*pEpInt_OUT[EPindex-1])(); 134 | 135 | } /* if((wEPVal & EP_CTR_RX) */ 136 | 137 | if ((wEPVal & EP_CTR_TX) != 0) 138 | { 139 | /* clear int flag */ 140 | _ClearEP_CTR_TX(EPindex); 141 | 142 | /* call IN service function */ 143 | (*pEpInt_IN[EPindex-1])(); 144 | } /* if((wEPVal & EP_CTR_TX) != 0) */ 145 | 146 | }/* if(EPindex == 0) else */ 147 | 148 | }/* while(...) */ 149 | } 150 | 151 | /******************************************************************************* 152 | * Function Name : CTR_HP. 153 | * Description : High Priority Endpoint Correct Transfer interrupt's service 154 | * routine. 155 | * Input : None. 156 | * Output : None. 157 | * Return : None. 158 | *******************************************************************************/ 159 | void CTR_HP(void) 160 | { 161 | u32 wEPVal = 0; 162 | 163 | while (((wIstr = _GetISTR()) & ISTR_CTR) != 0) 164 | { 165 | _SetISTR((u16)CLR_CTR); /* clear CTR flag */ 166 | /* extract highest priority endpoint number */ 167 | EPindex = (u8)(wIstr & ISTR_EP_ID); 168 | /* process related endpoint register */ 169 | wEPVal = _GetENDPOINT(EPindex); 170 | if ((wEPVal & EP_CTR_RX) != 0) 171 | { 172 | //printf("in1\n"); 173 | /* clear int flag */ 174 | _ClearEP_CTR_RX(EPindex); 175 | 176 | /* call OUT service function */ 177 | (*pEpInt_OUT[EPindex-1])(); 178 | 179 | } /* if((wEPVal & EP_CTR_RX) */ 180 | else if ((wEPVal & EP_CTR_TX) != 0) 181 | { 182 | //printf("out1\n"); 183 | /* clear int flag */ 184 | _ClearEP_CTR_TX(EPindex); 185 | 186 | /* call IN service function */ 187 | (*pEpInt_IN[EPindex-1])(); 188 | 189 | 190 | } /* if((wEPVal & EP_CTR_TX) != 0) */ 191 | 192 | }/* while(...) */ 193 | } 194 | 195 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 196 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_int.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_int.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Endpoint CTR (Low and High) interrupt's service routines 7 | * prototypes 8 | ******************************************************************************** 9 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 10 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 11 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 12 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 13 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 14 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 15 | *******************************************************************************/ 16 | 17 | /* Define to prevent recursive inclusion -------------------------------------*/ 18 | #ifndef __USB_INT_H 19 | #define __USB_INT_H 20 | 21 | /* Includes ------------------------------------------------------------------*/ 22 | /* Exported types ------------------------------------------------------------*/ 23 | /* Exported constants --------------------------------------------------------*/ 24 | /* Exported macro ------------------------------------------------------------*/ 25 | /* Exported functions ------------------------------------------------------- */ 26 | void CTR_LP(void); 27 | void CTR_HP(void); 28 | 29 | /* External variables --------------------------------------------------------*/ 30 | 31 | #endif /* __USB_INT_H */ 32 | 33 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 34 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_lib.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_lib.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : USB library include files 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_LIB_H 18 | #define __USB_LIB_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | #include "usb_type.h" 22 | #include "usb_regs.h" 23 | #include "usb_def.h" 24 | #include "usb_core.h" 25 | #include "usb_init.h" 26 | #include "usb_mem.h" 27 | #include "usb_int.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | /* Exported constants --------------------------------------------------------*/ 31 | /* Exported macro ------------------------------------------------------------*/ 32 | /* Exported functions ------------------------------------------------------- */ 33 | /* External variables --------------------------------------------------------*/ 34 | 35 | #endif /* __USB_LIB_H */ 36 | 37 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 38 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_mem.c: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_mem.c 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Utility functions for memory transfers to/from PMA 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Includes ------------------------------------------------------------------*/ 17 | #include "usb_lib.h" 18 | 19 | /* Private typedef -----------------------------------------------------------*/ 20 | /* Private define ------------------------------------------------------------*/ 21 | /* Private macro -------------------------------------------------------------*/ 22 | /* Private variables ---------------------------------------------------------*/ 23 | /* Extern variables ----------------------------------------------------------*/ 24 | /* Private function prototypes -----------------------------------------------*/ 25 | /* Private functions ---------------------------------------------------------*/ 26 | /******************************************************************************* 27 | * Function Name : UserToPMABufferCopy 28 | * Description : Copy a buffer from user memory area to packet memory area (PMA) 29 | * Input : - pbUsrBuf: pointer to user memory area. 30 | * - wPMABufAddr: address into PMA. 31 | * - wNBytes: no. of bytes to be copied. 32 | * Output : None. 33 | * Return : None . 34 | *******************************************************************************/ 35 | void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes) 36 | { 37 | u32 n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */ 38 | u32 i, temp1, temp2; 39 | u16 *pdwVal; 40 | pdwVal = (u16 *)(wPMABufAddr * 2 + PMAAddr); 41 | for (i = n; i != 0; i--) 42 | { 43 | temp1 = (u16) * pbUsrBuf; 44 | pbUsrBuf++; 45 | temp2 = temp1 | (u16) * pbUsrBuf << 8; 46 | *pdwVal++ = temp2; 47 | pdwVal++; 48 | pbUsrBuf++; 49 | } 50 | } 51 | /******************************************************************************* 52 | * Function Name : PMAToUserBufferCopy 53 | * Description : Copy a buffer from user memory area to packet memory area (PMA) 54 | * Input : - pbUsrBuf = pointer to user memory area. 55 | * - wPMABufAddr = address into PMA. 56 | * - wNBytes = no. of bytes to be copied. 57 | * Output : None. 58 | * Return : None. 59 | *******************************************************************************/ 60 | void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes) 61 | { 62 | u32 n = (wNBytes + 1) >> 1;/* /2*/ 63 | u32 i; 64 | u32 *pdwVal; 65 | pdwVal = (u32 *)(wPMABufAddr * 2 + PMAAddr); 66 | for (i = n; i != 0; i--) 67 | { 68 | *(u16*)pbUsrBuf++ = *pdwVal++; 69 | pbUsrBuf++; 70 | } 71 | } 72 | 73 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 74 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_mem.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_mem.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Utility prototypes functions for memory/PMA transfers 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_MEM_H 18 | #define __USB_MEM_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | /* Exported types ------------------------------------------------------------*/ 22 | /* Exported constants --------------------------------------------------------*/ 23 | /* Exported macro ------------------------------------------------------------*/ 24 | /* Exported functions ------------------------------------------------------- */ 25 | void UserToPMABufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes); 26 | void PMAToUserBufferCopy(u8 *pbUsrBuf, u16 wPMABufAddr, u16 wNBytes); 27 | 28 | /* External variables --------------------------------------------------------*/ 29 | 30 | #endif /*__USB_MEM_H*/ 31 | 32 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 33 | -------------------------------------------------------------------------------- /code/USB/LIB/usb_type.h: -------------------------------------------------------------------------------- 1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** 2 | * File Name : usb_type.h 3 | * Author : MCD Application Team 4 | * Version : V2.2.0 5 | * Date : 06/13/2008 6 | * Description : Type definitions used by the USB Library 7 | ******************************************************************************** 8 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 9 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 10 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 11 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 12 | * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 13 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 14 | *******************************************************************************/ 15 | 16 | /* Define to prevent recursive inclusion -------------------------------------*/ 17 | #ifndef __USB_TYPE_H 18 | #define __USB_TYPE_H 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | #include "usb_conf.h" 22 | 23 | /* Exported types ------------------------------------------------------------*/ 24 | /* Exported constants --------------------------------------------------------*/ 25 | #ifndef NULL 26 | #define NULL ((void *)0) 27 | #endif 28 | 29 | #ifndef __STM32F10x_TYPE_H 30 | /* 31 | typedef signed long s32; 32 | typedef signed short s16; 33 | typedef signed char s8; 34 | 35 | typedef volatile signed long vs32; 36 | typedef volatile signed short vs16; 37 | typedef volatile signed char vs8; 38 | 39 | typedef unsigned long u32; 40 | typedef unsigned short u16; 41 | typedef unsigned char u8; */ 42 | 43 | //typedef unsigned long const uc32; /* Read Only */ 44 | //typedef unsigned short const uc16; /* Read Only */ 45 | //typedef unsigned char const uc8; /* Read Only */ 46 | 47 | ///typedef volatile unsigned long vu32; 48 | //typedef volatile unsigned short vu16; 49 | //typedef volatile unsigned char vu8; 50 | 51 | //typedef volatile unsigned long const vuc32; /* Read Only */ 52 | //typedef volatile unsigned short const vuc16; /* Read Only */ 53 | //typedef volatile unsigned char const vuc8; /* Read Only */ 54 | 55 | 56 | //typedef enum 57 | //{ 58 | // FALSE = 0, TRUE = !FALSE 59 | //} 60 | //bool; 61 | 62 | //typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus; 63 | 64 | //typedef enum { DISABLE = 0, ENABLE = !DISABLE} FunctionalState; 65 | 66 | //typedef enum { ERROR = 0, SUCCESS = !ERROR} ErrorStatus; 67 | #endif 68 | 69 | /* Exported macro ------------------------------------------------------------*/ 70 | /* Exported functions ------------------------------------------------------- */ 71 | /* External variables --------------------------------------------------------*/ 72 | 73 | #endif /* __USB_TYPE_H */ 74 | 75 | /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/ 76 | -------------------------------------------------------------------------------- /code/USER/API.c: -------------------------------------------------------------------------------- 1 | #include 2 | -------------------------------------------------------------------------------- /code/USER/FAT16.h: -------------------------------------------------------------------------------- 1 | #ifndef __FAT16_H 2 | #define __FAT16_H 3 | 4 | #include 5 | 6 | #define FATBytesPerSec 2048 7 | #define FATBootSec 0 8 | #define FATTable0Sec0 2 9 | #define FATTable1Sec0 245 10 | #define FATRootDirSec0 488 11 | #define FATDataSec0 520 12 | 13 | #define FATFileNameSize 11 14 | #define FATDirSize 47 15 | #define FATBootSize 62 16 | #define FATTableSize 4 17 | 18 | #define FLASH_START_ADDR 0x08005000 // Flash start address 19 | 20 | #define FLASH_SIZE (100*1024*1024) // 100M 21 | #define FLASH_PAGE_SIZE (2*1024) // 2k Bytes per page 22 | #define FLASH_WAIT_TIMEOUT 100000 23 | 24 | typedef __packed struct 25 | { 26 | uint8_t BS_jmpBoot[3]; // Jump Instruction to boot mode (e.g EB,3C,90) 27 | uint8_t BS_OEMName[8]; // OEM Name Identifier(e.g MSDOS5.0) 28 | uint16_t BPB_BytesPerSec; // Count of bytes per sector(512/1024/2048/4096) 29 | uint8_t BPB_SecPerClus; // Number of sectors per allocation unit 30 | uint16_t BPB_RsvdSecCnt; // Number of reserved sectors 31 | uint8_t BPB_NumFATs; // The count of FAT Tables 32 | uint16_t BPB_RootEntCnt; // For FAT12/16, the count of 32-bytes directory entried in 33 | // the root directory 34 | uint16_t BPB_TotSec16; // total sectors on the volume 35 | uint8_t BPB_Media; // Media Type (0xF0) 36 | uint16_t BPB_FATSz16; // The count of sectors occupied by one FAT 37 | uint16_t BPB_SecPerTrk; // Sectors per track for interrupt 0x13 38 | uint16_t BPB_NumHeads; // Number of heads for interrupt 0x13 39 | uint32_t BPB_HiddSec; // Hidden sectors 40 | uint32_t BPB_TotSec32; // For FAT12/16, this field is zero 41 | 42 | // FAT12/16 43 | uint8_t BS_DrvNum; // Interrupt 0x13 drive number 44 | uint8_t BS_Reserved1; // Reserved 45 | uint8_t BS_BootSig; // Extended boot signature 46 | uint32_t BS_VolID; // Volume serial number 47 | uint8_t BSVolLab[11]; // Volume Lable 48 | uint8_t BS_FilSysType[8]; // "FAT12"/"FAT16"/"FAT32" 49 | uint8_t Code[448]; // Boot Code 50 | uint16_t SigWord; // 0xAA55 51 | }FAT_BPB_t; 52 | 53 | typedef __packed struct 54 | { 55 | uint8_t DIR_Name[11]; // File Name 56 | uint8_t DIR_Attr; // File Attribute 57 | uint8_t DIR_NTRes; // Reserved 58 | uint8_t DIR_CreateTime_Tenth; // Component of the file creation time 59 | uint16_t DIR_CreateTime; // Component of the file creation time 60 | uint16_t DIR_CreateDate; // Component of the file creation date 61 | uint16_t DIR_LastAccessDate; // Last Access date 62 | uint16_t DIR_ClusHigh; // High word of first data cluster 63 | uint16_t DIR_WriteTime; // Last modification write time 64 | uint16_t DIR_WriteDate; // Last modification write date 65 | uint16_t DIR_ClusLow; // Low word of first data cluster 66 | uint32_t DIR_FileSize; // Filesize 67 | }FAT_DIR_t; 68 | 69 | uint32_t FATReadLBA(uint32_t FAT_LBA,uint8_t* data, uint32_t len); 70 | uint32_t FATWriteLBA(uint32_t FAT_LBA,uint8_t* data, uint32_t len); 71 | 72 | uint32_t FATSetStatusFileName(const char * name); 73 | 74 | #endif // __FAT16_H 75 | -------------------------------------------------------------------------------- /code/USER/JLinkLog.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/JLinkLog.txt -------------------------------------------------------------------------------- /code/USER/JLinkSettings.ini: -------------------------------------------------------------------------------- 1 | [BREAKPOINTS] 2 | ForceImpTypeAny = 0 3 | ShowInfoWin = 1 4 | EnableFlashBP = 2 5 | BPDuringExecution = 0 6 | [CFI] 7 | CFISize = 0x00 8 | CFIAddr = 0x00 9 | [CPU] 10 | OverrideMemMap = 0 11 | AllowSimulation = 1 12 | ScriptFile="" 13 | [FLASH] 14 | CacheExcludeSize = 0x00 15 | CacheExcludeAddr = 0x00 16 | MinNumBytesFlashDL = 0 17 | SkipProgOnCRCMatch = 1 18 | VerifyDownload = 1 19 | AllowCaching = 1 20 | EnableFlashDL = 2 21 | Override = 0 22 | Device="UNSPECIFIED" 23 | [GENERAL] 24 | WorkRAMSize = 0x00 25 | WorkRAMAddr = 0x00 26 | RAMUsageLimit = 0x00 27 | [SWO] 28 | SWOLogFile="" 29 | [MEM] 30 | RdOverrideOrMask = 0x00 31 | RdOverrideAndMask = 0xFFFFFFFF 32 | RdOverrideAddr = 0xFFFFFFFF 33 | WrOverrideOrMask = 0x00 34 | WrOverrideAndMask = 0xFFFFFFFF 35 | WrOverrideAddr = 0xFFFFFFFF 36 | -------------------------------------------------------------------------------- /code/USER/RTE/RTE_Components.h: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Auto generated Run-Time-Environment Component Configuration File 4 | * *** Do not modify ! *** 5 | * 6 | * Project: 'UsbCardReader' 7 | * Target: 'Target 1' 8 | */ 9 | 10 | #ifndef RTE_COMPONENTS_H 11 | #define RTE_COMPONENTS_H 12 | 13 | 14 | #endif /* RTE_COMPONENTS_H */ 15 | -------------------------------------------------------------------------------- /code/USER/UsbCardReader.Uv2.bak: -------------------------------------------------------------------------------- 1 | ### uVision2 Project, (C) Keil Software 2 | ### Do not modify ! 3 | 4 | Target (Target 1), 0x0004 // Tools: 'ARM-ADS' 5 | 6 | Group (USER) 7 | Group (HARDWARE) 8 | Group (SYSTEM) 9 | Group (CORE) 10 | Group (FWLib) 11 | Group (MALLOC) 12 | Group (FATFS) 13 | Group (USB) 14 | Group (USBCFG) 15 | 16 | File 1,1,<.\main.c> 17 | File 1,1,<.\stm32f10x_it.c> 18 | File 1,1,<.\system_stm32f10x.c> 19 | File 2,1,<..\HARDWARE\LED\led.c> 20 | File 2,1,<..\HARDWARE\KEY\key.c> 21 | File 2,1,<..\HARDWARE\LCD\lcd.c> 22 | File 2,1,<..\HARDWARE\SPI\spi.c> 23 | File 2,1,<..\HARDWARE\FLASH\flash.c> 24 | File 2,1,<..\HARDWARE\SD\MMC_SD.C> 25 | File 3,1,<..\SYSTEM\delay\delay.c> 26 | File 3,1,<..\SYSTEM\sys\sys.c> 27 | File 3,1,<..\SYSTEM\usart\usart.c> 28 | File 4,1,<..\CORE\core_cm3.c> 29 | File 4,2,<..\CORE\startup_stm32f10x_hd.s> 30 | File 5,1,<..\STM32F10x_FWLib\src\misc.c> 31 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_fsmc.c> 32 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_gpio.c> 33 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_rcc.c> 34 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_spi.c> 35 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_usart.c> 36 | File 5,1,<..\STM32F10x_FWLib\src\stm32f10x_exti.c> 37 | File 6,1,<..\MALLOC\malloc.c> 38 | File 7,1,<..\FATFS\src\diskio.c> 39 | File 7,1,<..\FATFS\src\ff.c> 40 | File 7,1,<..\FATFS\exfuns\exfuns.c> 41 | File 7,1,<..\FATFS\src\option\cc936.c> 42 | File 7,1,<..\FATFS\exfuns\fattester.c> 43 | File 8,1,<..\USB\LIB\usb_core.c> 44 | File 8,1,<..\USB\LIB\usb_init.c> 45 | File 8,1,<..\USB\LIB\usb_int.c> 46 | File 8,1,<..\USB\LIB\usb_mem.c> 47 | File 8,1,<..\USB\LIB\usb_regs.c> 48 | File 9,1,<..\USB\CONFIG\hw_config.c> 49 | File 9,1,<..\USB\CONFIG\mass_mal.c> 50 | File 9,1,<..\USB\CONFIG\memory.c> 51 | File 9,1,<..\USB\CONFIG\scsi_data.c> 52 | File 9,1,<..\USB\CONFIG\usb_bot.c> 53 | File 9,1,<..\USB\CONFIG\usb_desc.c> 54 | File 9,1,<..\USB\CONFIG\usb_endp.c> 55 | File 9,1,<..\USB\CONFIG\usb_istr.c> 56 | File 9,1,<..\USB\CONFIG\usb_prop.c> 57 | File 9,1,<..\USB\CONFIG\usb_pwr.c> 58 | File 9,1,<..\USB\CONFIG\usb_scsi.c> 59 | 60 | 61 | Options 1,0,0 // Target 'Target 1' 62 | Device (STM32F103ZE) 63 | Vendor (STMicroelectronics) 64 | Cpu (IRAM(0x20000000-0x2000FFFF) IROM(0x8000000-0x807FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3")) 65 | FlashUt () 66 | StupF ("STARTUP\ST\STM32F10x.s" ("STM32 Startup Code")) 67 | FlashDR (UL2CM3(-O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_512 -FS08000000 -FL080000)) 68 | DevID (4216) 69 | Rgf (stm32f10x_lib.h) 70 | Mem () 71 | C () 72 | A () 73 | RL () 74 | OH () 75 | DBC_IFX () 76 | DBC_CMS () 77 | DBC_AMS () 78 | DBC_LMS () 79 | UseEnv=0 80 | EnvBin () 81 | EnvInc () 82 | EnvLib () 83 | EnvReg (ST\STM32F10x\) 84 | OrgReg (ST\STM32F10x\) 85 | TgStat=16 86 | OutDir (..\OBJ\) 87 | OutName (UsbCardReader) 88 | GenApp=1 89 | GenLib=0 90 | GenHex=1 91 | Debug=1 92 | Browse=1 93 | LstDir (.\) 94 | HexSel=1 95 | MG32K=0 96 | TGMORE=0 97 | RunUsr 0 0 <> 98 | RunUsr 1 0 <> 99 | BrunUsr 0 0 <> 100 | BrunUsr 1 0 <> 101 | CrunUsr 0 0 <> 102 | CrunUsr 1 0 <> 103 | SVCSID <> 104 | GLFLAGS=1790 105 | ADSFLGA { 243,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 106 | ACPUTYP ("Cortex-M3") 107 | RVDEV () 108 | ADSTFLGA { 0,12,0,2,99,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0 } 109 | OCMADSOCM { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 110 | OCMADSIRAM { 0,0,0,0,32,0,0,1,0 } 111 | OCMADSIROM { 1,0,0,0,8,0,0,8,0 } 112 | OCMADSXRAM { 0,0,0,0,0,0,0,0,0 } 113 | OCR_RVCT { 1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,8,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,1,0,0,0,0,0,0,0,0,0,0 } 114 | RV_STAVEC () 115 | ADSCCFLG { 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 116 | ADSCMISC () 117 | ADSCDEFN (STM32F10X_HD,USE_STDPERIPH_DRIVER) 118 | ADSCUDEF () 119 | ADSCINCD (..\HARDWARE\LED;..\SYSTEM\delay;..\SYSTEM\sys;..\SYSTEM\usart;..\USER;..\STM32F10x_FWLib\inc;..\CORE;..\HARDWARE\KEY;..\HARDWARE\LCD;..\HARDWARE\RTC;..\HARDWARE\RTC;..\HARDWARE\WKUP;..\HARDWARE\ADC;..\HARDWARE\DAC;..\HARDWARE\DMA;..\HARDWARE\IIC;..\HARDWARE\24CXX;..\HARDWARE\SPI;..\HARDWARE\FLASH;..\HARDWARE\TOUCH;..\HARDWARE\REMOTE;..\HARDWARE\ADXL345;..\HARDWARE\DS18B20;..\HARDWARE\NRF24L01;..\HARDWARE\SRAM;..\MALLOC;..\HARDWARE\SD;..\FATFS\exfuns;..\FATFS\src;..\USMART;..\FATFS\src\option;..\USB\CONFIG;..\USB\LIB) 120 | ADSASFLG { 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 121 | ADSAMISC () 122 | ADSADEFN () 123 | ADSAUDEF () 124 | ADSAINCD () 125 | PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 126 | IncBld=1 127 | AlwaysBuild=0 128 | GenAsm=0 129 | AsmAsm=0 130 | PublicsOnly=0 131 | StopCode=3 132 | CustArgs () 133 | LibMods () 134 | ADSLDFG { 17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } 135 | ADSLDTA (0x08000000) 136 | ADSLDDA (0x20000000) 137 | ADSLDSC () 138 | ADSLDIB () 139 | ADSLDIC () 140 | ADSLDMC () 141 | ADSLDIF () 142 | ADSLDDW () 143 | OPTDL (SARMCM3.DLL)()(DARMSTM.DLL)(-pSTM32F103ZE)(SARMCM3.DLL)()(TARMSTM.DLL)(-pSTM32F103ZE) 144 | OPTDBG 48126,7,()()()()()()()()()() (Segger\JL2CM3.dll)()()() 145 | FLASH1 { 9,0,0,0,1,0,0,0,5,16,0,0,0,0,0,0,0,0,0,0 } 146 | FLASH2 (Segger\JL2CM3.dll) 147 | FLASH3 ("" ()) 148 | FLASH4 () 149 | EndOpt 150 | 151 | -------------------------------------------------------------------------------- /code/USER/UsbCardReader.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/UsbCardReader.bin -------------------------------------------------------------------------------- /code/USER/UsbCardReader.opt.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/UsbCardReader.opt.bak -------------------------------------------------------------------------------- /code/USER/hex.c: -------------------------------------------------------------------------------- 1 | #include "hex.h" 2 | #include 3 | #include 4 | 5 | #define _ASCII_2_BYTE(ch1, ch2) ((lookuptable[(ch1)-'0']<<4) | (lookuptable[(ch2)-'0'])) 6 | 7 | static const uint8_t lookuptable[] = 8 | { 9 | 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ':', ';', '<', '=', '>', '?', '@', 10, 11, 12, 13, 14, 15, 10 | }; 11 | 12 | static HEX_OBJ_t HexObj; 13 | 14 | static uint8_t hex_ascii2byte(uint8_t* ascii, uint8_t* bytes, uint8_t len) 15 | { 16 | uint8_t i = 0; 17 | 18 | if(len%2) 19 | { 20 | return 0; 21 | } 22 | 23 | for(i = 0; i < len/2; i++) 24 | { 25 | bytes[i] = _ASCII_2_BYTE(ascii[2*i], ascii[2*i+1]); 26 | } 27 | 28 | return len/2; 29 | } 30 | 31 | HEX_OBJ_t* hex_newobject(void) 32 | { 33 | return &HexObj; 34 | } 35 | 36 | void hex_resetobject(HEX_OBJ_t* obj) 37 | { 38 | memset(obj, 0, sizeof(HEX_OBJ_t)); 39 | } 40 | 41 | uint8_t hex_findobject(HEX_OBJ_t* obj, uint8_t ch) 42 | { 43 | uint8_t result = HEX_E_WAIT; 44 | 45 | if(NULL == obj) 46 | { 47 | return HEX_E_ERROR; 48 | } 49 | 50 | switch(obj->state) 51 | { 52 | case 0: // search header 53 | { 54 | if(':' == ch) 55 | { 56 | //hex_resetobject(obj); 57 | obj->state = 1; 58 | obj->header = ch; 59 | obj->count = 2; 60 | } 61 | } 62 | break; 63 | case 1: // len 64 | { 65 | obj->buf[2 - obj->count] = ch; 66 | if(--obj->count == 0) 67 | { 68 | obj->len = _ASCII_2_BYTE(obj->buf[0], obj->buf[1]); 69 | 70 | if(0 == obj->len) // File Ends 71 | { 72 | obj->buf[0] = '0'; 73 | obj->buf[1] = '0'; 74 | obj->buf[2] = '0'; 75 | obj->buf[3] = '0'; 76 | obj->buf[4] = '0'; 77 | obj->buf[5] = '1'; 78 | obj->buf[6] = 'F'; 79 | obj->buf[7] = 'F'; 80 | obj->state = 8; 81 | obj->count = 8; 82 | } 83 | else if(obj->len <= HEX_DATA_LEN_MAX) 84 | { 85 | obj->count = 4; 86 | obj->state = 2; 87 | } 88 | else // Error 89 | { 90 | hex_resetobject(obj); 91 | result = HEX_E_ERROR; 92 | } 93 | } 94 | } 95 | break; 96 | case 2: // address 97 | { 98 | obj->buf[4 - obj->count] = ch; 99 | if(--obj->count == 0) 100 | { 101 | obj->addr_l[0] = _ASCII_2_BYTE(obj->buf[0], obj->buf[1]); 102 | obj->addr_l[1] = _ASCII_2_BYTE(obj->buf[2], obj->buf[3]); 103 | obj->state = 3; 104 | obj->count = 2; 105 | } 106 | } 107 | break; 108 | case 3: // type 109 | { 110 | obj->buf[2 - obj->count] = ch; 111 | if(--obj->count == 0) 112 | { 113 | // Hex Line Type 114 | obj->type = _ASCII_2_BYTE(obj->buf[0], obj->buf[1]); 115 | 116 | switch(obj->type) 117 | { 118 | case 0x00: // data 119 | case 0x04: // Section 120 | case 0x05: // Donothing 121 | { 122 | obj->state = 4; 123 | obj->count = obj->len*2; 124 | } 125 | break; 126 | 127 | default: 128 | { 129 | hex_resetobject(obj); 130 | result = HEX_E_ERROR; 131 | } 132 | break; 133 | } 134 | } 135 | } 136 | break; 137 | case 4: // data 138 | { 139 | obj->buf[obj->len*2 - obj->count] = ch; 140 | if(--obj->count == 0) 141 | { 142 | hex_ascii2byte(obj->buf, obj->data, obj->len*2); 143 | 144 | if(0x04 == obj->type) 145 | { 146 | memcpy(obj->addr_h, obj->data, obj->len); 147 | } 148 | else if(0x05 == obj->type) 149 | { 150 | // Donothing 151 | } 152 | 153 | obj->state = 5; 154 | obj->count = 2; 155 | } 156 | } 157 | break; 158 | case 5: // checksum 159 | { 160 | obj->buf[2 - obj->count] = ch; 161 | if(--obj->count == 0) 162 | { 163 | uint8_t sum = 0; 164 | obj->checksum = _ASCII_2_BYTE(obj->buf[0], obj->buf[1]); 165 | 166 | sum += obj->len; 167 | sum += obj->addr_l[0]; 168 | sum += obj->addr_l[1]; 169 | sum += obj->type; 170 | 171 | { 172 | uint8_t i = 0; 173 | for(i = 0; i < obj->len; i++) 174 | { 175 | sum += obj->data[i]; 176 | } 177 | } 178 | 179 | sum += obj->checksum; 180 | 181 | if(0 == sum) // Passed 182 | { 183 | obj->state = 0; 184 | result = HEX_E_OK; 185 | } 186 | else // Failured 187 | { 188 | hex_resetobject(obj); 189 | result = HEX_E_ERROR; 190 | } 191 | } 192 | } 193 | break; 194 | 195 | case 8: // File End Sqeue 196 | { 197 | uint8_t i = 8 - obj->count; 198 | if(obj->buf[i] == ch) 199 | { 200 | if(--obj->count == 0) 201 | { 202 | hex_resetobject(obj); 203 | result = HEX_E_FINISH; 204 | } 205 | } 206 | else 207 | { 208 | hex_resetobject(obj); 209 | result = HEX_E_ERROR; 210 | } 211 | } 212 | break; 213 | } 214 | 215 | return result; 216 | } 217 | 218 | uint8_t hex_getdata(HEX_OBJ_t* obj, HEX_DATA_t* data) 219 | { 220 | uint8_t* p = (uint8_t*) &(data->addr); 221 | 222 | if(obj->type) 223 | { 224 | return 0; 225 | } 226 | 227 | p[0] = obj->addr_l[1]; 228 | p[1] = obj->addr_l[0]; 229 | p[2] = obj->addr_h[1]; 230 | p[3] = obj->addr_h[0]; 231 | 232 | data->data = obj->data; 233 | data->len = obj->len; 234 | 235 | return data->len; 236 | } 237 | 238 | -------------------------------------------------------------------------------- /code/USER/hex.h: -------------------------------------------------------------------------------- 1 | #ifndef __HEX_H__ 2 | #define __HEX_H__ 3 | 4 | 5 | #include 6 | 7 | #define HEX_DATA_LEN_MAX 50 8 | 9 | typedef struct 10 | { 11 | uint32_t addr; 12 | uint8_t* data; 13 | uint8_t len; 14 | }HEX_DATA_t; 15 | 16 | typedef struct 17 | { 18 | uint8_t buf[2*HEX_DATA_LEN_MAX]; 19 | uint8_t count; 20 | uint8_t state; 21 | uint8_t addr_h[4]; 22 | 23 | uint8_t header; 24 | uint8_t len; 25 | uint8_t addr_l[4]; 26 | uint8_t type; 27 | uint8_t data[2*HEX_DATA_LEN_MAX]; 28 | uint8_t checksum; 29 | }HEX_OBJ_t; 30 | 31 | #define HEX_E_OK 0 32 | #define HEX_E_WAIT 1 33 | #define HEX_E_FINISH 2 34 | #define HEX_E_ERROR -1 35 | 36 | extern HEX_OBJ_t* hex_newobject(void); 37 | extern void hex_resetobject(HEX_OBJ_t* obj); 38 | extern uint8_t hex_findobject(HEX_OBJ_t* obj, uint8_t ch); 39 | extern uint8_t hex_getdata(HEX_OBJ_t* obj, HEX_DATA_t* data); 40 | 41 | #endif //__HEX_H__ 42 | 43 | -------------------------------------------------------------------------------- /code/USER/main.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/main.c -------------------------------------------------------------------------------- /code/USER/main.h: -------------------------------------------------------------------------------- 1 | #ifndef __MAIN_H__ 2 | #define __MAIN_H__ 3 | 4 | #include 5 | 6 | #define SYS_EVENT_ERR_IDLE 0x00000000 7 | #define SYS_EVENT_RUN_APP 0x00000001 8 | #define SYS_EVENT_ERR_READY 0x00000100 9 | #define SYS_EVENT_ERR_SUCCESS 0x00000200 10 | #define SYS_EVENT_ERR_UNKOWN 0x00000400 11 | #define SYS_EVENT_ERR_FLASH 0x00000800 12 | #define SYS_EVENT_ERR_APP 0x00001000 13 | #define SYS_EVENT_ERR_NOAPP 0x00002000 14 | #define SYS_EVENT_ERR_LARGE 0x00004000 15 | 16 | #define SYS_STATUS_USB_ON 0x00000001 17 | #define SYS_STATUS_USB_OFF 0x00000002 18 | #define SYS_STATUS_UPDATE_ON 0x00000004 19 | #define SYS_STATUS_UPDATE_OFF 0x00000008 20 | 21 | #define SYS_EVENT_RUN_MASK 0x00000001 22 | #define SYS_EVENT_ERR_MASK 0x0000FF00 23 | 24 | extern volatile uint32_t system_info; 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /code/USER/startup_stm32f10x_hd.lst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/startup_stm32f10x_hd.lst -------------------------------------------------------------------------------- /code/USER/stm32f10x.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/USER/stm32f10x.h -------------------------------------------------------------------------------- /code/USER/stm32f10x_conf.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file GPIO/IOToggle/stm32f10x_conf.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 08-April-2011 7 | * @brief Library configuration file. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM32F10x_CONF_H 24 | #define __STM32F10x_CONF_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | /* Uncomment/Comment the line below to enable/disable peripheral header file inclusion */ 28 | //#include "stm32f10x_adc.h" 29 | //#include "stm32f10x_bkp.h" 30 | //#include "stm32f10x_can.h" 31 | //#include "stm32f10x_cec.h" 32 | //#include "stm32f10x_crc.h" 33 | //#include "stm32f10x_dac.h" 34 | //#include "stm32f10x_dbgmcu.h" 35 | //#include "stm32f10x_dma.h" 36 | #include "stm32f10x_exti.h" 37 | #include "stm32f10x_flash.h" 38 | #include "stm32f10x_fsmc.h" 39 | #include "stm32f10x_gpio.h" 40 | //#include "stm32f10x_i2c.h" 41 | //#include "stm32f10x_iwdg.h" 42 | #include "stm32f10x_pwr.h" 43 | #include "stm32f10x_rcc.h" 44 | //#include "stm32f10x_rtc.h" 45 | //#include "stm32f10x_sdio.h" 46 | #include "stm32f10x_spi.h" 47 | #include "stm32f10x_tim.h" 48 | #include "stm32f10x_usart.h" 49 | //#include "stm32f10x_wwdg.h" 50 | #include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ 51 | 52 | /* Exported types ------------------------------------------------------------*/ 53 | /* Exported constants --------------------------------------------------------*/ 54 | /* Uncomment the line below to expanse the "assert_param" macro in the 55 | Standard Peripheral Library drivers code */ 56 | /* #define USE_FULL_ASSERT 1 */ 57 | 58 | /* Exported macro ------------------------------------------------------------*/ 59 | #ifdef USE_FULL_ASSERT 60 | 61 | /** 62 | * @brief The assert_param macro is used for function's parameters check. 63 | * @param expr: If expr is false, it calls assert_failed function which reports 64 | * the name of the source file and the source line number of the call 65 | * that failed. If expr is true, it returns no value. 66 | * @retval None 67 | */ 68 | #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) 69 | /* Exported functions ------------------------------------------------------- */ 70 | void assert_failed(uint8_t* file, uint32_t line); 71 | #else 72 | #define assert_param(expr) ((void)0) 73 | #endif /* USE_FULL_ASSERT */ 74 | 75 | #endif /* __STM32F10x_CONF_H */ 76 | 77 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 78 | -------------------------------------------------------------------------------- /code/USER/stm32f10x_it.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file GPIO/IOToggle/stm32f10x_it.c 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 08-April-2011 7 | * @brief Main Interrupt Service Routines. 8 | * This file provides template for all exceptions handler and peripherals 9 | * interrupt service routine. 10 | ****************************************************************************** 11 | * @attention 12 | * 13 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 14 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 15 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 16 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 17 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 18 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 19 | * 20 | *

© COPYRIGHT 2011 STMicroelectronics

21 | ****************************************************************************** 22 | */ 23 | 24 | /* Includes ------------------------------------------------------------------*/ 25 | #include "stm32f10x_it.h" 26 | #include "usb_lib.h" 27 | #include "usb_istr.h" 28 | 29 | /******************************************************************************* 30 | * Function Name : USB_HP_CAN_TX_IRQHandler 31 | * Description : This function handles USB High Priority or CAN TX interrupts 32 | * requests. 33 | * Input : None 34 | * Output : None 35 | * Return : None 36 | *******************************************************************************/ 37 | void USB_HP_CAN1_TX_IRQHandler(void) 38 | { 39 | CTR_HP(); 40 | } 41 | 42 | /******************************************************************************* 43 | * Function Name : USB_LP_CAN_RX0_IRQHandler 44 | * Description : This function handles USB Low Priority or CAN RX0 interrupts 45 | * requests. 46 | * Input : None 47 | * Output : None 48 | * Return : None 49 | *******************************************************************************/ 50 | void USB_LP_CAN1_RX0_IRQHandler(void) 51 | { 52 | USB_Istr(); 53 | } 54 | void USBWakeUp_IRQHandler(void) 55 | { 56 | } 57 | 58 | /******************************************************************************/ 59 | /* STM32F10x Peripherals Interrupt Handlers */ 60 | /* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ 61 | /* available peripheral interrupt handler's name please refer to the startup */ 62 | /* file (startup_stm32f10x_xx.s). */ 63 | /******************************************************************************/ 64 | -------------------------------------------------------------------------------- /code/USER/stm32f10x_it.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file GPIO/IOToggle/stm32f10x_it.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 08-April-2011 7 | * @brief This file contains the headers of the interrupt handlers. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /* Define to prevent recursive inclusion -------------------------------------*/ 23 | #ifndef __STM32F10x_IT_H 24 | #define __STM32F10x_IT_H 25 | 26 | /* Includes ------------------------------------------------------------------*/ 27 | #include "stm32f10x.h" 28 | 29 | /* Exported types ------------------------------------------------------------*/ 30 | /* Exported constants --------------------------------------------------------*/ 31 | /* Exported macro ------------------------------------------------------------*/ 32 | /* Exported functions ------------------------------------------------------- */ 33 | 34 | void NMI_Handler(void); 35 | void HardFault_Handler(void); 36 | void MemManage_Handler(void); 37 | void BusFault_Handler(void); 38 | void UsageFault_Handler(void); 39 | void SVC_Handler(void); 40 | void DebugMon_Handler(void); 41 | void PendSV_Handler(void); 42 | void SysTick_Handler(void); 43 | 44 | #endif /* __STM32F10x_IT_H */ 45 | 46 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 47 | -------------------------------------------------------------------------------- /code/USER/system_stm32f10x.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file system_stm32f10x.h 4 | * @author MCD Application Team 5 | * @version V3.5.0 6 | * @date 11-March-2011 7 | * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. 8 | ****************************************************************************** 9 | * @attention 10 | * 11 | * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 12 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE 13 | * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY 14 | * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING 15 | * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE 16 | * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 17 | * 18 | *

© COPYRIGHT 2011 STMicroelectronics

19 | ****************************************************************************** 20 | */ 21 | 22 | /** @addtogroup CMSIS 23 | * @{ 24 | */ 25 | 26 | /** @addtogroup stm32f10x_system 27 | * @{ 28 | */ 29 | 30 | /** 31 | * @brief Define to prevent recursive inclusion 32 | */ 33 | #ifndef __SYSTEM_STM32F10X_H 34 | #define __SYSTEM_STM32F10X_H 35 | 36 | #ifdef __cplusplus 37 | extern "C" { 38 | #endif 39 | 40 | /** @addtogroup STM32F10x_System_Includes 41 | * @{ 42 | */ 43 | 44 | /** 45 | * @} 46 | */ 47 | 48 | 49 | /** @addtogroup STM32F10x_System_Exported_types 50 | * @{ 51 | */ 52 | 53 | extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ 54 | 55 | /** 56 | * @} 57 | */ 58 | 59 | /** @addtogroup STM32F10x_System_Exported_Constants 60 | * @{ 61 | */ 62 | 63 | /** 64 | * @} 65 | */ 66 | 67 | /** @addtogroup STM32F10x_System_Exported_Macros 68 | * @{ 69 | */ 70 | 71 | /** 72 | * @} 73 | */ 74 | 75 | /** @addtogroup STM32F10x_System_Exported_Functions 76 | * @{ 77 | */ 78 | 79 | extern void SystemInit(void); 80 | extern void SystemCoreClockUpdate(void); 81 | /** 82 | * @} 83 | */ 84 | 85 | #ifdef __cplusplus 86 | } 87 | #endif 88 | 89 | #endif /*__SYSTEM_STM32F10X_H */ 90 | 91 | /** 92 | * @} 93 | */ 94 | 95 | /** 96 | * @} 97 | */ 98 | /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ 99 | -------------------------------------------------------------------------------- /code/keilkilll.bat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/code/keilkilll.bat -------------------------------------------------------------------------------- /doc/USB MSD Updater User Manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/doc/USB MSD Updater User Manual.pdf -------------------------------------------------------------------------------- /hex/USB MSD Bootloader.hex.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cedar-renjun/usb_msd_bootloader/bb78be1f8b662f93a315b63b1b7419715a3c8575/hex/USB MSD Bootloader.hex.zip --------------------------------------------------------------------------------