原创 最近用STM32搞了个U盘功能

2023-4-12 14:54 2245 18 8 分类: MCU/ 嵌入式 文集: 单片机
工程师干了几年后,基本会有小外包的生活,算是赚外快吧,搞小钱改善伙食,嘻嘻。。。。
最近有个客户找到我,说是否通过ST的单片机搞个U盘功能,有些文件通过U盘拖拽放入的方式比较方便。当时就有点懵了,这从来没这么用过,后来查查资料,还真网上有这么玩的,所以就记录下自己的实现过程既然要搞,一般过程都是网上找个demo,看懂了然后自己改改,我也是这么干的。。。。
改芯片相关配置

demo使用的芯片跟我目前的不一样,所以第一步把配置相关的改改

KEIL中将芯片切换为自己的芯片型号

更改系统配置宏

 STM32F10X_LD、STM32F10X_MD和STM32F10X_HD跟MCU的内部FLASH容量有关

 

更改时钟配置

DEMO中的硬件外部时钟使用的是8M的,客户板卡用的12M的,需要配置时钟

更改相关宏

 

stm32f10x.h中更改119行8000000为12000000. STM32F10X_CL为互联型芯片,我这里用的不是。

改系统时钟配置

 

因为DEMO使用的系统时钟是72M的,所以找到宏定义位置

修改RCC_CFGR_PLLMULL9RCC_CFGR_PLLMULL6

配置调试串口

编译烧录,板卡接串口,设置配置好的波特率,上电查看是否打印正常

• 注意串口号以及对应的IO

  1. void USART1_Config(void)
  2. {
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. USART_InitTypeDef USART_InitStructure;
  5. /* config USART2 clock */
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  7. RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ,ENABLE);
  8. /* USART2 GPIO config */
  9. /* Configure USART2 Tx (PA.09) as alternate function push-pull */
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  12. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13. GPIO_Init(GPIOA, &GPIO_InitStructure);
  14. /* Configure USART2 Rx (PA.10) as input floating */
  15. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  16. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  17. GPIO_Init(GPIOA, &GPIO_InitStructure);
  18. /* USART2 mode config */
  19. USART_InitStructure.USART_BaudRate = 115200;
  20. USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  21. USART_InitStructure.USART_StopBits = USART_StopBits_1;
  22. USART_InitStructure.USART_Parity = USART_Parity_No ;
  23. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  24. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  25. USART_Init(USART2, &USART_InitStructure);
  26. USART_Cmd(USART2, ENABLE);
  27. }

重映射到标准输出

  1. int fputc(int ch, FILE *f)
  2. {
  3. USART_SendData(USART2, (unsigned char) ch);
  4. while (!(USART2->SR & USART_FLAG_TXE));
  5. return (ch);
  6. }

配置内部flash

memery.c中修改存储buffer

 

mass_mal.c修改对应参数

 

• 对于是stm32f103cbt6最大只能设置25K的U盘,只有1K能被初始化

编译烧录

编译烧录后,USB接入PC会弹出初始化窗口,确认初始化就行了。

 

 

愉快的拿钱去了。。。。。。。。。。

作者: 二月半, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-1862109.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

二月半 2023-7-7 10:58

luckyzy2000: 还是软件来钱爽。。。
这个要看情况吧

luckyzy2000 2023-4-26 09:54

还是软件来钱爽。。。
相关推荐阅读
二月半 2024-05-09 11:10
ADS软件分享与安装
ADS软件的简介ADS软件(Advanced Design System)主要用于射频(RF)、微波(Microwave)和毫米波(Millimeter-wave)电路的设计、仿真和分析。它提供了一套...
二月半 2024-03-31 09:22
从零开始摄像头驱动设计(一)_I2C框架及设备树插件应用
前言像我这样很多学习驱动的同学都会想一个问题:学了这个能干嘛?学了那个能干嘛?姑且找找网络上开源的项目,找找,看看,还是一脸懵。因为开源只提供源码和大致介绍下做什么和有什么。而面对于基础开发者的博客还...
二月半 2024-03-28 09:10
高速电路设计、完整性设计推荐书籍
信号传输如今是越来越高速,伴随着的将是更多的信号完整性的问题。然而电源的完整性也影响着信号的完整性。这样的高速传输,以前不用太多考虑的EMI问题,也越来越被关注。 针对于这些问题,对于layout工...
二月半 2024-03-15 07:01
Cadence之创建自己的titleblock
在刚接触PCB原理图设计的时候,很多人是不会关注图纸Tile Block的。原因是觉得用不上。然而工作的时候这个反而很重要。原因呢,一是形成一个统一标准,便于归档,整洁清楚,二是其中包含重要信息,比如...
二月半 2024-03-12 09:38
allegro之坚固的半孔制作
随着芯片不断的更新迭代,一浪拍死一浪。做硬件的特别头疼,核心电路或者可复用电路因为某一个板卡需要重新设计整板。很多都是做的无用功,为了更加高效的完成工作,然后摸鱼。硬件界的人才们,找到了很多方法。最多...
二月半 2024-03-07 11:03
ALLegro之单独设置PIN脚与覆铜连接方式
 设计PCB时,有很多时候在总电源输入处需要将一部分pin脚设置为全连接,给大电流拓宽通道。然而如果往常针对同一覆铜下的同属性pin脚只能全部设置为全连接或者其他。所以,在初学者手上也出现了...
EE直播间
更多
我要评论
2
18
关闭 站长推荐上一条 /3 下一条