用户工具

站点工具


icore3_arm_hal_16

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
icore3_arm_hal_16 [2020/03/31 15:00]
zgf 创建
icore3_arm_hal_16 [2022/03/18 15:07] (当前版本)
sean
行 1: 行 1:
- +|  **银杏科技有限公司旗下技术文档发布平台** ​ |||| 
 +|技术支持电话|**0379-69926675-801**||| 
 +|技术支持邮件|Gingko@vip.163.com||| 
 +^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ 
 +|  V1.0  |  2020-03-31 ​ |  gingko ​ |  初次建立 ​ |  
 +\\
 ===== STM32CubeMX教程十六——SDIO实验 ===== ===== STM32CubeMX教程十六——SDIO实验 =====
 1. 在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​ 1. 在主界面选择File-->​New Project ​  ​或者直接点击ACCEE TO MCU SELECTOR  ​
-{{ :​icore3:​icore3_cube_16_1.png |}}+{{ :​icore3:​icore3_cube_16_1.png?​direct ​|}}
 2. 出现芯片型号选择,搜索芯片的型号,双击型号,或者点击Start Project进入配置 2. 出现芯片型号选择,搜索芯片的型号,双击型号,或者点击Start Project进入配置
 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等,可以帮助用户查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等,可以帮助用户查找芯片。本实验选取的芯片型号为:STM32F407IGTx。
-{{ :​icore3:​icore3_cube_16_2.png |}}+{{ :​icore3:​icore3_cube_16_2.png?​direct ​|}}
 3. 配置RCC,使用外部时钟源 3. 配置RCC,使用外部时钟源
-{{ :​icore3:​icore3_cube_16_3.png |}}+{{ :​icore3:​icore3_cube_16_3.png?​direct ​|}}
 4. 配置调试引脚 4. 配置调试引脚
-{{ :​icore3:​icore3_cube_16_4.png |}}+{{ :​icore3:​icore3_cube_16_4.png?​direct ​|}}
 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output
-{{ :​icore3:​icore3_cube_16_5.png |}}+{{ :​icore3:​icore3_cube_16_5.png?​direct ​|}}
 6. 引脚模式配置 6. 引脚模式配置
-{{ :​icore3:​icore3_cube_16_6.png |}}+{{ :​icore3:​icore3_cube_16_6.png?​direct ​|}}
 7. 配置SDIO 7. 配置SDIO
-{{ :​icore3:​icore3_cube_16_7.png |}} +{{ :​icore3:​icore3_cube_16_7.png?​direct ​|}} 
-{{ :​icore3:​icore3_cube_16_8.png |}} +{{ :​icore3:​icore3_cube_16_8.png?​direct ​|}} 
-{{ :​icore3:​icore3_cube_16_9.png |}}+{{ :​icore3:​icore3_cube_16_9.png?​direct ​|}}
 8. 配置串口 8. 配置串口
-{{ :​icore3:​icore3_cube_16_10.png |}}+{{ :​icore3:​icore3_cube_16_10.png?​direct ​|}}
 9. 时钟源设置,选择外部高速时钟源,配置为最大主频 9. 时钟源设置,选择外部高速时钟源,配置为最大主频
-{{ :​icore3:​icore3_cube_16_11.png |}}+{{ :​icore3:​icore3_cube_16_11.png?​direct ​|}}
 10. 工程文件的设置,​ 这里就是工程的各种配置,​我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5 10. 工程文件的设置,​ 这里就是工程的各种配置,​我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK5
-{{ :​icore3:​icore3_cube_16_12.png |}}+{{ :​icore3:​icore3_cube_16_12.png?​direct ​|}}
 11. 点击Code Generator,进行进一步配置 11. 点击Code Generator,进行进一步配置
-{{ :​icore3:​icore3_cube_16_13.png |}}+{{ :​icore3:​icore3_cube_16_13.png?​direct ​|}}
   * **Copy all used libraries into the project folder**   * **Copy all used libraries into the project folder**
   * 将HAL库的所有.C和.H都复制到所建工程中   * 将HAL库的所有.C和.H都复制到所建工程中
行 41: 行 45:
   * 自行选择方式即可   * 自行选择方式即可
 12. 然后点击GENERATE CODE  创建工程 12. 然后点击GENERATE CODE  创建工程
-{{ :​icore3:​icore3_cube_16_14.png |}}+{{ :​icore3:​icore3_cube_16_14.png?​direct ​|}}
 创建成功,打开工程。 创建成功,打开工程。
 +\\
 +\\
 +\\
 +===== 实验十六:SDIO实验——读取SD卡信息 =====
 +
 +==== 一、 实验目的与意义 ====
 +  - 了解STM32 SDIO结构。
 +  - 了解STM32 SDIO特征。
 +  - 掌握SDIO的使用方法。
 +  - 掌握STM32 HAL库中SDIO属性的配置方法。
 +  - 掌握KEIL ​ MDK集成开发环境使用方法。
 +==== 二、 实验设备及平台 ====
 +  - iCore3 双核心板。[[https://​item.taobao.com/​item.htm?​id=524229438677|点击购买]]
 +  - JLINK(或相同功能)仿真器。[[https://​item.taobao.com/​item.htm?​id=554869837940|点击购买]]
 +  - Micro USB线缆。
 +  - Keil MDK 开发平台。
 +  - STM32CubeMX开发平台。
 +  - 装有WIN XP(及更高版本)系统的计算机。
 +==== 三、 实验原理 ====
 +
 +  * **SDIO简介**
 +  * STM32F407提供了SD/​SDIO/​MMC主机接口,支持三种不同数据总线模式下的多媒体卡系统规范版本4.2:1位(默认)、4位和8位。
 +    * 该接口允许在高达48兆赫的数据传输,并符合SD卡规范版本2.0。SDIO卡规范版本2.0还支持两种不同的数据总线模式:1位(默认)和4位。
 +    * 当前版本一次只支持一个SD/​SDIO/​MMC4.2卡和一个MMC4.1或以前版本的堆栈。
 +    * 该接口完全符合CE-ATA数字协议第1.1版。
 +  * **SDIO的时钟**
 +    * 卡时钟(SDIO_CK):每个时钟周期在命令和数据线上传输1位命令或数据。对于多媒体卡V3.31协议,时钟频率可以在0MHz至20MHz间变化;对于多媒体卡V4.0/​4.2协议,时钟频率可以在0MHz至48MHz间变化;对于SD或SD I/​O卡,时钟频率可以在0MHz至25MHz间变化。
 +    * SDIO适配器时钟(SDIOCLK):该时钟用于驱动SDIO适配器,来自PLL48CK,一般为48Mhz,并用于产生SDIO_CK时钟。
 +    * APB2总线接口时钟(PCLK2):该时钟用于驱动SDIO的APB2总线接口,其频率为HCLK/​2,一般为84Mhz。
 +  * **SD卡**
 +  * SD卡是一种基于半导体快闪记忆器的新一代记忆设备,广泛应用于便携式装置上使用,按容量分为三类:
 +    * SD(SDSC)卡:2G容量
 +    * SDHC卡:​2G~32G容量
 +    * SDXC卡:32G~2T容量
 +  * STM32F407上带有SDIO控制器,iCore3核心板上将SDIO连接到TF卡座上。本实验将Micro SD卡插入TF卡座上即可。硬件连接示意图如下:
 +{{ :​icore3:​icore3_arm_hal_16_1.png?​direct&​400 |}}
 +  * 硬件电路图如下图所示:
 +{{ :​icore3:​icore3_arm_hal_16_2.png?​direct&​700 |}}
 +==== 四、 实验程序 ====
 +=== 1. 主函数 ===
 +  * 在main.c程序中,在完成初始化之后,首先设置串口
 +<code c>
 +      MX_UART4_Init();​
 +      uart4.initialize(115200);​  ​     //​设置串口波特率
 +      uart4.printf("​\x0c"​); ​                          //​清屏 ​  
 +      uart4.printf("​\033[1;​32;​40m"​); ​                 //​设置字体终端为绿色 ​  ​  ​
 +      uart4.printf("​\r\nHello,​ I am iCore3!\r\n\r\n"​);//​串口信息输出
 +      //​锁定对象
 +</​code> ​
 +  * 判断SD卡是否完成初始化,​初始化失败时红灯闪烁
 +<code c>
 + if(HAL_SD_Init(&​hsd) != 0){
 + uart4.printf("​SD ERROR!\r\n"​);​
 + while(1){
 + for(i = 0;i < 10000000;​i++);​
 + LED_RED_ON;​
 + for(i = 0;i < 10000000;​i++);​
 + LED_RED_OFF;​
 + }
 +
 +</​code> ​
 +  * 输出SD卡的类型:
 +    * CARD_SDSC即标准容量SD卡 ​  
 +    * CARD_SDHC_SDXC即大容量SD卡,支持最大32GB大小容量
 +    * CARD_SECURED即32G~2T容量
 +<code c>
 +switch(hsd.SdCard.CardType){
 + case CARD_SDSC:
 + uart4.printf("​SD CardType\t\t:​ CARD_SDSC\r\n"​);​
 + break;
 + case CARD_SDHC_SDXC:​
 + uart4.printf("​SD CardType\t\t:​ CARD_SDHC_SDXC\r\n"​);​
 + break;
 + case CARD_SECURED:​
 + uart4.printf("​SD CardType\t\t:​ CARD_SECURED\r\n"​);​
 + break;
 +}
 +//​判断SDIO为CARD_V1_X还是CARD_V2_X
 +switch(hsd.SdCard.CardVersion){
 + case CARD_V1_X:
 + uart4.printf("​SD CardVersion\t:​ CARD_V1_X\r\n"​);​
 + break;
 + case CARD_V2_X:
 + uart4.printf("​SD SD CardVersion\t:​ CARD_V2_X\r\n"​);​
 + break;
 +
 +</​code> ​
 +  * 输出SD卡的参数
 +<code c>
 +uart4.printf("​SD CardCapacity\t\t:​ %dMB\r\n",​(unsigned long int)(hsd.SdCard.BlockNbr * hsd.SdCard.BlockSize) >> 20);
 +uart4.printf("​SD CardBlockSize\t:​ %dByte\r\n",​hsd.SdCard.BlockSize);​
 +uart4.printf("​SD RelCardAdd\t\t:​ %d\r\n",​hsd.SdCard.RelCardAdd);​
 +
 +while (1)
 +{
 +        for(i = 0;i < 10000000;​i++);​
 + LED_GREEN_ON;​
 + for(i = 0;i < 10000000;​i++);​
 + LED_GREEN_OFF;​
 +}
 +
 +</​code> ​
 +=== 2. SD结构体定义 ===
 +<code c>
 +SD_HandleTypeDef ​      hsd
 +</​code> ​
 +  * SD_HandleTypeDef这个结构体中存放了SD所有用到的功能,后面的别名就是我们所用的SD的别名
 +<code c>
 +typedef struct ​
 +{  ​
 +SD_TypeDef ​                 *Instance;​ //​SD寄存器基地址  ​
 +SD_InitTypeDef ​             Init;
 +  HAL_LockTypeDef ​             Lock;     ​ //​锁定对象 ​        
 +uint8_t ​                     *pTxBuffPtr;//​SD TX传输缓冲区指针 ​     ​
 +uint32_t ​                     TxXferSize;//​SD TX传输大小 ​       ​
 +uint8_t ​                     *pRxBuffPtr;//​SD TX传输缓冲区指针
 +uint32_t ​                     RxXferSize;//​SD TX传输大小 ​  
 +__IO uint32_t ​                 Context; ​  //SD TX传输内容
 + __IO HAL_SD_StateTypeDef ​   State; ​    //​传输状态
 +__IO uint32_t ​                 ErrorCode; //​SD错误代码 ​  
 +  DMA_HandleTypeDef ​             *hdmatx; //SD Tx DMA句柄参数
 +  DMA_HandleTypeDef ​           *hdmarx; //SD Rx DMA句柄参数
 +HAL_SD_CardInfoTypeDef ​      ​ SdCard; ​  //​SD卡信息  ​
 +uint32_t ​                    ​ CSD[4];​
 +uint32_t ​                    ​ CID[4]; ​    
 +} SD_HandleTypeDef;​
 +
 +</​code> ​
 +  * 上述SD_HandleTypeDef结构体包含了指向寄存器的指针、指向传输的指针,互斥锁、一个描述状态的变量、一个保存错误代码的变量、指向DMA结构体的指针等。所有对SD进行操作的函数都使用这个结构体的指针作为参数。
 +<code c>
 +typedef struct
 +{
 +  uint32_t CardType; ​                    
 +  uint32_t CardVersion; ​                 ​
 +  uint32_t Class; ​                       ​
 +  uint32_t RelCardAdd; ​                  
 +  uint32_t BlockNbr; ​                  
 +  uint32_t BlockSize; ​                 ​
 +  uint32_t LogBlockNbr; ​                
 +  uint32_t LogBlockSize; ​                
 +}HAL_SD_CardInfoTypeDef;​
 +
 +</​code> ​
 +  * 上述HAL_SD_CardInfoTypeDef,该结构体用来表述SD类型、容量、块大小等信息
 +
 +==== 五、 实验步骤 ====
 +
 +  - 把仿真器与iCore3的SWD调试口相连(直接相连或者通过转接器相连);
 +  - 把iCore3通过Micro USB线与计算机相连,为iCore3供电;
 +  - 打开Keil MDK 开发环境,并打开本实验工程;
 +  - 打开PuTTY串口终端(注:PuTTY使用方法见附录);
 +  - 烧写程序到iCore3上;
 +  - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。
 +==== 六、 实验现象 ====
 +  * 在终端显示屏上可以看到Micro SD卡的信息,如下图:
 +{{ :​icore3:​icore3_arm_hal_16_3.png?​direct |}}
 +==== 附录: ====
 +
 +1.iCore3供电后,打开计算机----属性----设备管理器----端口
 +{{ :​icore3:​icore3_arm_hal_16_4.png?​direct |}}
 +2.打开PuTTY
 +{{ :​icore3:​icore3_arm_hal_16_5.png?​direct |}}
 +3.此时就可以烧写程序进行验证了。
  
icore3_arm_hal_16.1585638005.txt.gz · 最后更改: 2020/03/31 15:00 由 zgf