0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32H743基于SPI的SD卡驅(qū)動(dòng)開發(fā)流程簡(jiǎn)析

冬至子 ? 來(lái)源:xinyz4104 ? 作者:xinyz4104 ? 2023-08-15 11:19 ? 次閱讀

STM32H743以太網(wǎng)驅(qū)動(dòng)調(diào)試

硬件環(huán)境:
基于STM32H743IIT6自研單板
(1)外部時(shí)鐘:25MHz
(2)調(diào)試串口: PC12 ———> UART5_TX
PD2 ———> UART5_RX
(3)SPI6
PG12 ———> SPI6_MISO
PG13 ———> SPI6_SCK
PG14 ———> SPI6_MOSI
PG8 ———> SPI6_NSS

軟件開發(fā)環(huán)境
RT-Thread Studio
版本: 2.2.6
構(gòu)建ID: 202211231640
OS: Windows 10, v.10.0, x86_64 / win32

調(diào)試串口+以太網(wǎng)

RT-Thread配置

1.jpg

1.jpg

SPI配置
在board.h文件中,參考SPI配置說(shuō)明依次配置SPI參數(shù)

/ -------------------------- SPI CONFIG BEGIN -------------------------- /
/** if you want to use spi bus you can use the following instructions.

STEP 1, open spi driver framework support in the RT-Thread Settings file

STEP 2, define macro related to the spi bus* ```
such as #define BSP_USING_SPI1


STEP 3, copy your spi init function from stm32xxxx_hal_msp.c generated by stm32cubemx to the end of board.c file

such as     void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)

STEP 4, modify your stm32xxxx_hal_config.h file to support spi peripherals. define macro related to the peripherals

such as     #define HAL_SPI_MODULE_ENABLED

/
#define BSP_USING_SPI
/
#define BSP_USING_SPI1*/
/ #define BSP_USING_SPI2 /
/ #define BSP_USING_SPI3 /
/ #define BSP_USING_SPI4 /
/ #define BSP_USING_SPI5 /
#define BSP_USING_SPI6
/ -------------------------- SPI CONFIG END -------------------------- /
在board.c文件中添加HAL_SPI_MspInit函數(shù)

void HAL_SPI_MspInit(SPI_HandleTypeDef* spiHandle)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
if(spiHandle->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 /
/
USER CODE END SPI1_MspInit 0 /
/
* Initializes the peripherals clock
/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1;
PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/
SPI1 clock enable */
__HAL_RCC_SPI1_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**SPI1 GPIO Configuration
PG9 ------> SPI1_MISO
PG11 ------> SPI1_SCK
PB5 ------> SPI1_MOSI
/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/
SPI1 interrupt Init /
HAL_NVIC_SetPriority(SPI1_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI1_IRQn);
/
USER CODE BEGIN SPI1_MspInit 1 /
/
USER CODE END SPI1_MspInit 1 */
}
else if(spiHandle->Instance==SPI2)
{
/* USER CODE BEGIN SPI2_MspInit 0 */
/* USER CODE END SPI2_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI2;
PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* SPI2 clock enable */
__HAL_RCC_SPI2_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOI_CLK_ENABLE();
/**SPI2 GPIO Configuration
PB10 ------> SPI2_SCK
PB15 ------> SPI2_MOSI
PI2 ------> SPI2_MISO
*/
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);
/* SPI2 interrupt Init */
HAL_NVIC_SetPriority(SPI2_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI2_IRQn);
/* USER CODE BEGIN SPI2_MspInit 1 */
/* USER CODE END SPI2_MspInit 1 */
}
else if(spiHandle->Instance==SPI3)
{
/* USER CODE BEGIN SPI3_MspInit 0 */
/* USER CODE END SPI3_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3;
PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* SPI3 clock enable */
__HAL_RCC_SPI3_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
/**SPI3 GPIO Configuration
PB2 ------> SPI3_MOSI
PC10 ------> SPI3_SCK
PC11 ------> SPI3_MISO
*/
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF7_SPI3;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
/* SPI3 interrupt Init */
HAL_NVIC_SetPriority(SPI3_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI3_IRQn);
/* USER CODE BEGIN SPI3_MspInit 1 */
/* USER CODE END SPI3_MspInit 1 */
}
else if(spiHandle->Instance==SPI4)
{
/* USER CODE BEGIN SPI4_MspInit 0 */
/* USER CODE END SPI4_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI4;
PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* SPI4 clock enable */
__HAL_RCC_SPI4_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
/**SPI4 GPIO Configuration
PE2 ------> SPI4_SCK
PE5 ------> SPI4_MISO
PE6 ------> SPI4_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_5|GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;//GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI4;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/* SPI4 interrupt Init */
HAL_NVIC_SetPriority(SPI4_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI4_IRQn);
/* USER CODE BEGIN SPI4_MspInit 1 */
/* USER CODE END SPI4_MspInit 1 */
}
else if(spiHandle->Instance==SPI5)
{
/* USER CODE BEGIN SPI5_MspInit 0 */
/* USER CODE END SPI5_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI5;
PeriphClkInitStruct.Spi45ClockSelection = RCC_SPI45CLKSOURCE_D2PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* SPI5 clock enable */
__HAL_RCC_SPI5_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
/**SPI5 GPIO Configuration
PF7 ------> SPI5_SCK
PF8 ------> SPI5_MISO
PF9 ------> SPI5_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI5;
HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
/* SPI5 interrupt Init */
HAL_NVIC_SetPriority(SPI5_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI5_IRQn);
/* USER CODE BEGIN SPI5_MspInit 1 */
/* USER CODE END SPI5_MspInit 1 */
}
else if(spiHandle->Instance==SPI6)
{
/* USER CODE BEGIN SPI6_MspInit 0 */
/* USER CODE END SPI6_MspInit 0 */
/** Initializes the peripherals clock
*/
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI6;
PeriphClkInitStruct.Spi6ClockSelection = RCC_SPI6CLKSOURCE_D3PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
Error_Handler();
}
/* SPI6 clock enable */
__HAL_RCC_SPI6_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
/**SPI6 GPIO Configuration
PG12 ------> SPI6_MISO
PG13 ------> SPI6_SCK
PG14 ------> SPI6_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF5_SPI6;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
/* SPI6 interrupt Init */
HAL_NVIC_SetPriority(SPI6_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(SPI6_IRQn);
/* USER CODE BEGIN SPI6_MspInit 1 */
/* USER CODE END SPI6_MspInit 1 */
}
}
在stm32h7xx_hal_conf.h文件中,打開宏定義:

#define HAL_SPI_MODULE_ENABLED

在drv_spi.c文件的spi_config數(shù)組中用到了SPI6_BUS_CONFIG,默認(rèn)工程是沒有的,需要自己添加,可以參考已有的SPI配置

1.jpg

在spi_config.h文件尾部添加SPI6_BUS_CONFIG

#ifdef BSP_USING_SPI6
#ifndef SPI6_BUS_CONFIG
#define SPI6_BUS_CONFIG
{
.Instance = SPI6,
.bus_name = "spi6",
}
#endif /* SPI6_BUS_CONFIG /
#endif /
BSP_USING_SPI6 /
//#ifdef BSP_SPI6_TX_USING_DMA
//#ifndef SPI6_TX_DMA_CONFIG
//#define SPI6_TX_DMA_CONFIG
// {
// .dma_rcc = SPI6_TX_DMA_RCC,
// .Instance = SPI6_TX_DMA_INSTANCE,
// .channel = SPI6_TX_DMA_CHANNEL,
// .dma_irq = SPI6_TX_DMA_IRQ,
// }
//#endif /
SPI6_TX_DMA_CONFIG /
//#endif /
BSP_SPI6_TX_USING_DMA /
//
//#ifdef BSP_SPI6_RX_USING_DMA
//#ifndef SPI6_RX_DMA_CONFIG
//#define SPI6_RX_DMA_CONFIG
// {
// .dma_rcc = SPI6_RX_DMA_RCC,
// .Instance = SPI6_RX_DMA_INSTANCE,
// .channel = SPI6_RX_DMA_CHANNEL,
// .dma_irq = SPI6_RX_DMA_IRQ,
// }
//#endif /
SPI6_RX_DMA_CONFIG /
//#endif /
BSP_SPI6_RX_USING_DMA */
在dfs_fs.c文件中,添加文件系統(tǒng)默認(rèn)裝載表:

const struct dfs_mount_tbl mount_table[] =
{
{"sd0", "/", "elm", 0, 0},
{0}
};

在driver目錄下添加drv_spi_tfcard.c文件

測(cè)試

1.jpg

至此完成基于SPI的SD驅(qū)動(dòng)框架。

遺留問題
添加SD后,MPU配置會(huì)影響以太網(wǎng)ping的效果,使用下面配置SD卡、以太網(wǎng)均正常

{
MPU_Region_InitTypeDef MPU_InitStruct = {0};
/* Disables the MPU /
HAL_MPU_Disable();
/
* Initializes and configures the Region and the memory to be protected
/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
* Initializes and configures the Region and the memory to be protected
/
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.BaseAddress = 0x30044000;
MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
Enables the MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}
使用下面的配置,以太網(wǎng)ping不通

{
MPU_Region_InitTypeDef MPU_InitStruct;
/* Disable the MPU /
HAL_MPU_Disable();
/
Configure the MPU attributes as WT for AXI SRAM /
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x24000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0X00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#ifdef BSP_USING_SDRAM
/
Configure the MPU attributes as WT for SDRAM /
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0xC0000000;
MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER1;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif
#ifdef BSP_USING_ETH
/
Configure the MPU attributes as Device not cacheable
for ETH DMA descriptors and RX Buffers*/
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = 0x30040000;
MPU_InitStruct.Size = MPU_REGION_SIZE_32KB;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER2;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
#endif
/* Configure the MPU attributes as WT for QSPI /
// MPU_InitStruct.Enable = MPU_REGION_ENABLE;
// MPU_InitStruct.BaseAddress = 0x90000000;
// MPU_InitStruct.Size = MPU_REGION_SIZE_8MB;
// MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
// MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
// MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
// MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
// MPU_InitStruct.Number = MPU_REGION_NUMBER3;
// MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
// MPU_InitStruct.SubRegionDisable = 0X00;
// MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
//
// HAL_MPU_ConfigRegion(&MPU_InitStruct);
/
Enable the MPU /
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
/
Enable CACHE */
SCB_EnableICache();
SCB_EnableDCache();
return RT_EOK;
}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    258

    瀏覽量

    34228
  • 以太網(wǎng)接口
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    16989
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39437
  • HAL庫(kù)
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    6033
  • STM32H743
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    1596
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    關(guān)于STM32H743 SD例程問題

    使用的是STM32H743I_EVAL中的SDSD_ReadWrite_DMA例程,如果stm32h743xx_hal_conf.h中#d
    發(fā)表于 05-24 11:17

    STM32H743外部中斷

    STM32CubeMX學(xué)習(xí)——STM32H743外部中斷STM32CubeMX配置Pinout配置Clock Configuration配置ConfigurationGPIONVIC代碼部分
    發(fā)表于 08-13 06:02

    AWTK-MVVM在STM32H743上是怎樣去移植的

    AWTK-MVVM 在 STM32H743 上的移植筆記本項(xiàng)目除了實(shí)現(xiàn)基本功能的移植外,還提供了如下功能:集成實(shí)時(shí)操作系統(tǒng) (RTOS)(騰訊的 TinyOS)集成 FATFS 文件系統(tǒng),訪問 SD
    發(fā)表于 08-24 06:45

    STM32H743 Flash用來(lái)存什么

    STM32H743 Flash用來(lái)存什么?STM32H743 Flash的硬件特性和基本操作是什么?
    發(fā)表于 09-24 09:41

    NUCLEO STM32H743怎么使用?

    NUCLEO STM32H743怎么使用?
    發(fā)表于 11-08 06:25

    STM32H743串口的配置流程是怎樣的?

    STM32H743串口的配置流程是怎樣的?
    發(fā)表于 12-03 06:21

    stm32h743板子有哪些功能呢

    stm32h7板子支持100腳的stm32h743h750這兩款芯片,板子io口全引出來(lái)。功能:sd接口,24pin的cmos攝像頭接
    發(fā)表于 02-11 07:16

    stm32H743 stm32cubemx SPI_FLASH FATFS詳解,絕對(duì)實(shí)用

    stm32H743 stm32cubemx SPI_FLASHFATFS詳解,絕對(duì)實(shí)用
    發(fā)表于 02-17 06:40

    請(qǐng)問如何用STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)?

    請(qǐng)問如何用STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)?
    發(fā)表于 02-22 06:35

    STM32H743芯片上實(shí)現(xiàn)CAN通信的步驟

    本篇筆記主要介紹,在STM32H743芯片上實(shí)現(xiàn)CAN通信,封裝為BSP驅(qū)動(dòng),為之后實(shí)現(xiàn)CAN的高層通信打下基礎(chǔ)。
    的頭像 發(fā)表于 09-14 14:33 ?1.5w次閱讀
    在<b class='flag-5'>STM32H743</b>芯片上實(shí)現(xiàn)CAN通信的步驟

    RT-Thread文件系統(tǒng)組件在STM32H743上的應(yīng)用

    RT-Thread(后文簡(jiǎn)稱RT)提供的DFS組件、Fatfs組件和SDIO驅(qū)動(dòng)組合起來(lái)可用于操作SD,但RT的底層驅(qū)動(dòng)目前對(duì)STM32H743
    發(fā)表于 12-05 18:36 ?4次下載
    RT-Thread文件系統(tǒng)組件在<b class='flag-5'>STM32H743</b>上的應(yīng)用

    stm32h750/stm32h743原理圖和pcb源文件

    。stm32h7板子支持100腳的stm32h743h750這兩款芯片,板子io口全引出來(lái)。功能:sd接口,24pin的cmos攝像頭接
    發(fā)表于 12-08 09:21 ?152次下載
    <b class='flag-5'>stm32h</b>750/<b class='flag-5'>stm32h743</b>原理圖和pcb源文件

    stm32h743外部RAM非字節(jié)對(duì)齊訪問,引起的hard fault

    stm32h743外部RAM非字節(jié)對(duì)齊訪問,引起的hard fault
    發(fā)表于 12-09 09:21 ?5次下載
    <b class='flag-5'>stm32h743</b>外部RAM非字節(jié)對(duì)齊訪問,引起的hard fault

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)

    STM32cube實(shí)現(xiàn)STM32H743的USB驅(qū)動(dòng)基于STM32cube實(shí)現(xiàn)STM32H743的USB
    發(fā)表于 12-28 19:53 ?37次下載
    用<b class='flag-5'>STM32</b>cube實(shí)現(xiàn)<b class='flag-5'>STM32H743</b>的USB<b class='flag-5'>驅(qū)動(dòng)</b>

    stm32h743軟件模擬i2c驅(qū)動(dòng)

    stm32h743 實(shí)現(xiàn)gpio模擬i2c資料分享
    發(fā)表于 12-01 11:12 ?7次下載