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

2023-4-12 14:54 2429 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

void USART1_Config(void)
  • {
  • GPIO_InitTypeDef GPIO_InitStructure;
  • USART_InitTypeDef USART_InitStructure;
  • /* config USART2 clock */
  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  • RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 ,ENABLE);
  • /* USART2 GPIO config */
  • /* Configure USART2 Tx (PA.09) as alternate function push-pull */
  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  • GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  • GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  • GPIO_Init(GPIOA, &GPIO_InitStructure);
  • /* Configure USART2 Rx (PA.10) as input floating */
  • GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  • GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  • GPIO_Init(GPIOA, &GPIO_InitStructure);
  • /* USART2 mode config */
  • USART_InitStructure.USART_BaudRate = 115200;
  • USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  • USART_InitStructure.USART_StopBits = USART_StopBits_1;
  • USART_InitStructure.USART_Parity = USART_Parity_No ;
  • USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  • USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  • USART_Init(USART2, &USART_InitStructure);
  • USART_Cmd(USART2, ENABLE);
  • }
  • 复制代码

    重映射到标准输出

    int fputc(int ch, FILE *f)
  • {
  • USART_SendData(USART2, (unsigned char) ch);
  • while (!(USART2->SR & USART_FLAG_TXE));
  • return (ch);
  • }
  • 复制代码

    配置内部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

    还是软件来钱爽。。。
    相关推荐阅读
    二月半 2025-06-17 16:39
    13. ESP32开发之定时器中断
    概述相关API函数举例:定时发送一个事件总结概述ESP32有一组外设--定时器组。它可以选择不同的时钟源和分配系数。该定时器应用灵活,超时报警可以自动更新计数值。相关API函数1.定时器配置结构体ty...
    二月半 2025-06-12 14:32
    【拆解】一款远程控制开关
    七年前买了个远程控制开关,想想那个时候应该物联网才兴起的时候吧。如今因为控制麻烦且经常出现连接掉线问题,于是给淘汰了。这个设备我是拿来控制吊灯,特别麻烦的是,当晚上关灯后,会有一点灯点亮着,掉线的时候...
    二月半 2025-06-12 10:11
    ESP32开发之GPIO中断
    电路图GPIO的中断类型相关API函数应用举例总结电路图在ESP32中内部有完整的控制电路,比如上下拉以及滤波器等,所以我们这里可以直接用一个微动开关连接到地。GPIO的中断类型GPIO_INTR_D...
    二月半 2025-06-09 22:37
    ESP32开发之WS2812B控制
    WS2812B数据手册重点摘录硬件电路Remote Control Transceive(RMT)概念RMT的相关API函数一段简单的控制WS2812B的应用举例总结WS2812B数据手册重点摘录WS...
    二月半 2025-06-04 09:07
    10. ESP32开发之LED闪烁和呼吸的实现
    硬件电路介绍GPIO输出模式GPIO配置过程闪烁灯的源码LED PWM的控制器(LEDC)概述LEDC配置过程及现象整体流程硬件电路介绍电路图如下:只要有硬件基础的应该都知道上图中,当GPIO4的输出...
    二月半 2025-06-02 21:24
    【Milk-V Duo 开发板】+初用体验
    许久未在面包板社区申请板卡评测了。这一次偶然最近的这款Milk-V Duo开发板正在评测。首次看到如此简单切功能强大的嵌入式平台:· 支持linux、rtos· 可接一路Camera,做人脸检测、目标...
    我要评论
    2
    18
    关闭 站长推荐上一条 /4 下一条