Martin ThomasさんのSTM32F用FatFsの修正点 [ARM&Cortex-M3]
※10月14日の版でこの件は修正が行われた様です。
え!、勿論面識無いです(笑)。
例のSTM32F用のFatFsを提供してくれているMartin Thomasさんの2009年9月10日版のプロジェクトファイルですが、細かい話ですがLibraries\fat_sdのsd_spi_stm32.cに若干の修正が必要な様です。
175行目のこれを、
この様に、
また185行目を
この様にします。
共にWrite Protect、Card Detectを有効にしてビルドを行うと、コンパイラ、またはリンカーに怒られて間違いが発覚します。
最初の奴はGPIO_InitTypeDef構造体が用意されていなくてエラーですね。
2番目の奴はもろにタイプミスでしょう。
2008年6月号のDWMの付録基板をお持ちの方なら実際にFatFsをお試しいただけると思います。
一部PINの割付等がMartin Thomasさんの場合と異なるので、コンフィギュレーションの一部を自分の基板向けに修正する必要があります。
私はDWMの付録基板を持っていないのでAIRESの例で行けば、
を#else句の中に記述してしまいました。
以上!。
え!、勿論面識無いです(笑)。
例のSTM32F用のFatFsを提供してくれているMartin Thomasさんの2009年9月10日版のプロジェクトファイルですが、細かい話ですがLibraries\fat_sdのsd_spi_stm32.cに若干の修正が必要な様です。
175行目のこれを、
static void socket_wp_cp_init(void) { /* Turn on GPIO for socket-switches */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_WP_CP, ENABLE); /* Configure I/O for Power FET */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_WP | GPIO_Pin_CP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIO_WP_CP, &GPIO_InitStructure); }
この様に、
static void socket_wp_cp_init(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Turn on GPIO for socket-switches */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_WP_CP, ENABLE); /* Configure I/O for Power FET */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_WP | GPIO_Pin_CP; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_WP_CP; GPIO_Init(GPIO_WP_CP, &GPIO_InitStructure); }
また185行目を
static inline socket_state_t socket_wp_cp_state(void) { return (socket_state_t)(GPIO_ReadInputDate(GPIO_WP_CP) & ( GPIO_Pin_WP | GPIO_Pin_CP)); }
この様にします。
static inline socket_state_t socket_wp_cp_state(void) { return (socket_state_t)(GPIO_ReadInputData(GPIO_WP_CP) & ( GPIO_Pin_WP | GPIO_Pin_CP)); }
共にWrite Protect、Card Detectを有効にしてビルドを行うと、コンパイラ、またはリンカーに怒られて間違いが発覚します。
最初の奴はGPIO_InitTypeDef構造体が用意されていなくてエラーですね。
2番目の奴はもろにタイプミスでしょう。
2008年6月号のDWMの付録基板をお持ちの方なら実際にFatFsをお試しいただけると思います。
一部PINの割付等がMartin Thomasさんの場合と異なるので、コンフィギュレーションの一部を自分の基板向けに修正する必要があります。
私はDWMの付録基板を持っていないのでAIRESの例で行けば、
#define CARD_SUPPLY_SWITCHABLE 0 #define SOCKET_WP_CP_CONNECTED 1 /* */ #define GPIO_WP_CP GPIOB #define RCC_APB2Periph_GPIO_WP_CP RCC_APB2Periph_GPIOB #define GPIO_Pin_WP GPIO_Pin_11 #define GPIO_Pin_CP GPIO_Pin_10 #define GPIO_Mode_WP_CP GPIO_Mode_IPU /* pull up resistors */ #define SPI_SD SPI2 #define GPIO_CS GPIOB #define RCC_APB2Periph_GPIO_CS RCC_APB2Periph_GPIOB #define GPIO_Pin_CS GPIO_Pin_12 #define DMA_Channel_SPI_SD_RX DMA1_Channel4 #define DMA_Channel_SPI_SD_TX DMA1_Channel5 #define DMA_FLAG_SPI_SD_TC_RX DMA1_FLAG_TC4 #define DMA_FLAG_SPI_SD_TC_TX DMA1_FLAG_TC5 #define GPIO_SPI_SD GPIOB #define GPIO_Pin_SPI_SD_SCK GPIO_Pin_13 #define GPIO_Pin_SPI_SD_MISO GPIO_Pin_14 #define GPIO_Pin_SPI_SD_MOSI GPIO_Pin_15 #define RCC_APBPeriphClockCmd_SPI_SD RCC_APB1PeriphClockCmd #define RCC_APBPeriph_SPI_SD RCC_APB1Periph_SPI2 /* for SPI2 and full-speed APB1: 36MHz/2 */ /* !! PRESCALE 4 used here - 2 does not work, maybe because of the poor wireing on the HELI_V1 prototype hardware */ #define SPI_BaudRatePrescaler_SPI_SD SPI_BaudRatePrescaler_2 /*可能だが若干不安定*/ // #define SPI_BaudRatePrescaler_SPI_SD SPI_BaudRatePrescaler_4 /*実用可能*/ // #define SPI_BaudRatePrescaler_SPI_SD SPI_BaudRatePrescaler_256 //#error "unsupported board"
を#else句の中に記述してしまいました。
以上!。
2009-10-14 20:50
nice!(0)
コメント(0)
トラックバック(0)
コメント 0