一、测试平台:
MCU:STM32F429IGT6
工具:STM32CubeMX软件
编译软件:MDK
二、配置步骤
(1).打开STM32CubeMX软件,创建新的工程文件,点击ACCESS TO MCU SELECTOR选项。
![在这里插入图片描述](https://img-blog.csdnimg.cn/bd696bbea4974651af68177f86440e6f.png#pic_center)
(2).选择芯片型号,在这里选择STM32F429IGT6型号。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c6bfdd1faad24e9abc47945c350c6136.png#pic_center)
(3).配置时钟,点击System Core项下的RCC栏,由于电路板上有外部晶振,这里配置外部晶振,High Speed Clock(HSE),Low Speed Clock(LSE)都设置为Crystal/Ceramic Resonator。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e77c3dca8698427ead59896354c5b43f.png#pic_center)
(4),配置时钟数(Clock Configuration),由于电路板上的晶振分别为25MHZ,32.768KHZ,在这里我们输入25MHZ,HCLK栏输入180之后按回车键,让软件自动配置完成。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a86557016c444ca3b52f4d0749b9cc6c.png#pic_center)
(5).配置串口1,用于调试使用,Mode栏选择Asynchronous,管脚选择PA9,PA10,电路板上串口1对应PA9,PA10,勾选USART1 global interrupt中断。
![在这里插入图片描述](https://img-blog.csdnimg.cn/59ea9348755c43d18669da4b7b36dd53.png#pic_center)
(6).填写工程文件信息,按如下图示设置即可
![在这里插入图片描述](https://img-blog.csdnimg.cn/b835534b97f4461ba3a0c0ee56c4bc25.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/238a22bcb836477586e7ce164149fa91.png#pic_center)
(7).生成代码,用于测试串口1生成的工程项目是否可用,点击GENERATE CODE。
(8).测试代码,在工程文件中添加代码int fputc(int ch,FILE *f),勾选Use MicroLIB选项,用printf函数测试串口1的功能。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a9efb32b790f485b892da1b752c6166b.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/46ebdef00b934b138346bf3675ac3ab0.png#pic_center)
(9).配置USB_OTG,由于电路板上的USB引出来的管脚是PB14,PB15,所以在这里需要配置USB_OTG_HS,由于电路板上没有外接Phy,所以这里配置为内部的FS Phy,Internal FS Phy选项下Host Only。
![在这里插入图片描述](https://img-blog.csdnimg.cn/b4cc1dff527542b3880007ffe2455142.png#pic_center)
(10).配置USB_HOST,由于我们是用做U盘的读写,所以在这里配置为Class For HS IP项下选择Mass Storage Host Class。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ea0681e03e084d6189a70e7dfcdd97df.png#pic_center)
(11).配置FATFS,勾选USB Disk,由于我们需要用到中文,所以CODE PAGE选择Simplified Chinese (DBCS),配置为长文件名,USE_LFN选择Enabled with static working buffer on…
![在这里插入图片描述](https://img-blog.csdnimg.cn/a4ca90e7a99c4c889ccf31a157dcc5d5.png#pic_center)
(12).配置完USB之后,返回Clock Configuration界面下更新时钟,可看到48MHZ的时钟现在生效了,用来操作U盘的,再次生成代码GENERATE CODE。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2c43536cde1a4c3885b88a3f68dd5e54.png#pic_center)
(13).打开工程文件,替换USBH_UsrLog(…)宏定义为
#define USBH_UsrLog(…) do {
printf(“USBH_UsrLog: “) ;
printf(VA_ARGS);
printf(”\n”);
} while (0)
![在这里插入图片描述](https://img-blog.csdnimg.cn/74073b456aae4fbaa538584476788028.png#pic_center)
(14).编译完成之后,下载到电路板上,插入U盘,串口1输出以下信息,说明生成的USB Host成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ce4ea5317b8146d980ced53750ecb36b.png#pic_center)
(15),若需要生成带有FreeRtos的工程,则配置FreeRtos。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9503627273eb4ba383db5520ae85bd52.png#pic_center)
(16).USB_Host需要重新设置一下,CMSIS_RTOS中的 USBH_USE_OS Enable,USBH_PROCESS_STACK_SIZE 512,默认堆栈大小为128,经实验当U盘插入之后,程序会进入HardFault_Handler,修改为512正常。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6a23cc76e11842558012313c6c85fd45.png#pic_center)