20230412-使用STM32实现内部flash模拟U盘

最近用STM32F103CBT6搞了个U盘功能

​ 工程师干了几年后,基本会有小外包的生活,算是赚外快吧,搞小钱改善伙食,嘻嘻。。。。

​ 最近有个客户找到我,说是否通过ST的单片机搞个U盘功能,有些文件通过U盘拖拽放入的方式比较方便。当时就有点懵了,这从来没这么用过,后来查查资料,还真网上有这么玩的,所以就记录下自己的实现过程

​ 既然要搞,一般过程都是网上找个demo,看懂了然后自己改改,我也是这么干的。。。。

改芯片相关配置

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

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

在这里插入图片描述

  1. 更改系统配置宏

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

在这里插入图片描述

更改时钟配置

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

  1. 更改相关宏

在这里插入图片描述

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

  1. 改系统时钟配置

在这里插入图片描述

因为DEMO使用的系统时钟是72M的,所以找到宏定义位置在这里插入图片描述

修改RCC_CFGR_PLLMULL9为RCC_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

  1. 在memery.c中修改存储buffer

在这里插入图片描述

  1. 在mass_mal.c修改对应参数

在这里插入图片描述

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

编译烧录

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

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

湮雨塵飛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值