mark0668 发表于 2016-10-17 20:37:41

【Nucleo STM32F767ZI】 STM32CubeMX + USB_DEVICE 大容量U盘教程




【Nucleo STM32F767ZI】 STM32CubeMX + USB读取U盘文件例程

【Nucleo STM32F767ZI】 STM32CubeMX + SDIO读取TF卡例程




【Nucleo STM32F767ZI】 STM32CubeMX + USB_DEVICE 大容量U盘教程

手把手教你使用CUBE 软件生成USB_DEVICE 大容量U盘 工程,用到的软件版本 (STM32CubeMX 4.17),(HAL 库1.5.0),,,,(KEIL 5.20).




1.选择开发板型号F767



2.选择外部晶振.



3.选择USB    DEVICE_Only.



4.选择外部晶振为时钟源.USB必须为48M时钟.



5.选择USB 大容量存储设备.


6.框里面的选项全部关闭,你也可以根据自己的需求设置.我这就选全关闭的了.



7.为每个外设都分配一个*.H,*.C这样方便管理外设.



8.自定义个工程名称,再选择开发环境,我我使用的 MDK KEIL V5,最后很重要设置堆栈大小一定要加大点,默认的太小了.设好就点击生成工程.



9.生成工程后就打开工程
#define STORAGE_BLK_NBR                  0x10000//多少个扇区
#define STORAGE_BLK_SIZ                  0x200       //扇区大小

0x10000 * 0x200 = 32MB
这文件里面有U盘的API函接接口,根据自己的接口移植就可以了.




10.main 源码默认的.编绎工程下载程序.


11.下载程序后运行,插入USB会提示正在安装驱动,安装完会跳出让你格式化U盘.这里显示32MB 是正确的,能认出这就大功告成了,剩下的自己移植读写等等的API函数就可以了.



kylongmu 发表于 2016-10-18 20:49:12

void StartDefaultTask(void const * argument)
{
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();

/* USER CODE BEGIN 5 */
USBD_Interface_fops_FS.Init();
USBD_Interface_fops_FS.Receive(rec_buf,&rec_len);
/* Infinite loop */
for(;;)
{
    osDelay(1000);
      HAL_GPIO_TogglePin(GPIOB,LD2_Pin);
      //if(USBD_Interface_fops_FS.Receive(rec_buf,&rec_len)==USBD_OK)
                CDC_Transmit_FS(rec_buf,rec_len);
      //else
                //CDC_Transmit_FS(send_buf,sizeof(send_buf));
}
/* USER CODE END 5 */
}
用USB的虚拟串口模式发送数据,主机已经能收到,就是用CDC_Transmit_FS函数,但是接收没搞定,不知道接收如何调用,我线程里面调用接收怎么都收不到数据。

kylongmu 发表于 2016-10-18 23:06:47

kylongmu 发表于 2016-10-18 20:49
void StartDefaultTask(void const * argument)
{
/* init code for USB_DEVICE */


自己解决了,CDC_Receive_FS原来是个回调函数,看这个链接解决的。http://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fRead+data+from+PC+to+STM32+via+USB+CDC¤tviews=40#{45400978-49AE-4BEF-9B37-C4EA93F7BB0E}

kylongmu 发表于 2016-10-17 21:25:41

明白了,谢谢啊,不过我仍然有些对Keil与CubeMX的关系有些混乱,keil里面可以调用CubeMX来配置,但是很多头文件与库的关系就乱了。如果是CubeMX来生产keil的工程,本身没有问题,但是却不能再在里面用Keil调用CubeMX配置,这样就成了死循环了。

mark0668 发表于 2016-10-17 20:39:25

占沙发了.

kylongmu 发表于 2016-10-17 21:30:22

另外配置为Virtual Port com是用usb口模拟一个串口吗?
我按这个配置编译下载后计算机不会找到新的串口设备。

mark0668 发表于 2016-10-17 21:50:51

kylongmu 发表于 2016-10-17 21:25
明白了,谢谢啊,不过我仍然有些对Keil与CubeMX的关系有些混乱,keil里面可以调用CubeMX来配置,但是很多头 ...

CUBE只是帮你生成初始化代码,需要修改什么可以再次用CUBE来生成.

mark0668 发表于 2016-10-17 21:51:09

kylongmu 发表于 2016-10-17 21:25
明白了,谢谢啊,不过我仍然有些对Keil与CubeMX的关系有些混乱,keil里面可以调用CubeMX来配置,但是很多头 ...

CUBE只是帮你生成初始化代码,需要修改什么可以再次用CUBE来生成.

mark0668 发表于 2016-10-17 21:51:35

kylongmu 发表于 2016-10-17 21:25
明白了,谢谢啊,不过我仍然有些对Keil与CubeMX的关系有些混乱,keil里面可以调用CubeMX来配置,但是很多头 ...

CUBE只是帮你生成初始化代码,需要修改什么可以再次用CUBE来生成.

mark0668 发表于 2016-10-17 21:53:06

kylongmu 发表于 2016-10-17 21:30
另外配置为Virtual Port com是用usb口模拟一个串口吗?
我按这个配置编译下载后计算机不会找到新的串口设备 ...

这个需要安装驱动

kylongmu 发表于 2016-10-17 21:57:40

mark0668 发表于 2016-10-17 21:53
这个需要安装驱动

找到说明,装了驱动了,http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-utilities/stsw-stm32102.html
但是找到的设备是:
不是预期的显示STM

Paderboy 发表于 2016-10-17 22:23:45

:loveliness:多谢分享。。。学习了

zengyi703-16313 发表于 2016-10-18 08:12:03

谢楼主分享

zero99 发表于 2016-10-18 08:40:03

支持一下

高二毛 发表于 2016-10-18 08:50:44

感谢分享,学习了。

zbber 发表于 2016-10-18 11:22:37

淡定,淡定,淡定……

ynwscfsfi 发表于 2016-10-18 12:54:37

多谢分享。。。学习了
页: [1] 2 3
查看完整版本: 【Nucleo STM32F767ZI】 STM32CubeMX + USB_DEVICE 大容量U盘教程