1 ENV下不用将stm32fnxx_hal_msp.c拷贝到RTT工程文件夹下(也不用调用其中的片上外设函数如void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi),听说KCONFIG自己会调用;studio下根据文档说是需要;
stm32_spi_init-》HAL_SPI_Init-》 HAL_SPI_MspInit(hspi)-》在stm32f4xx_hal_spi.c中弱定义,所以需要将cubumx生成的 HAL_SPI_MspInit拷贝到board.c下
2 关于SPI配置,当设定最大速率后最终发现时钟频率降低2倍的原因,是因为RTT获取时钟源函数stm32_spi_init下的 SPI_APB_CLOCK不正确,没有正确反映外设挂在哪个总线下面;解决方法有2种:
- 方法1 :将struct rt_spi_configuration cfg 的cfg.max_hz*2并做好备注声明(适合共享给其它人应用的软件包);
- 方法2:将下面的通过宏定义修改正确,从而获得正确的参数时钟(分频值),这种方法适合代码自用(因为别人不一定用该SPI,且时钟源也不一定相同(不同系列的STM32));
#if defined(SOC_SERIES_STM32F0) || defined(SOC_SERIES_STM32G0)
SPI_APB_CLOCK = HAL_RCC_GetPCLK1Freq();
#else
SPI_APB_CLOCK = HAL_RCC_GetPCLK2Freq();
#endif
3 外设的使用一定要注意打开board.h进行类似以下的声明
#define BSP_USING_UART1 #define BSP_UART1_TX_PIN "PA9" #define BSP_UART1_RX_PIN "PA10"
4 自己写的驱动老是说找不到头文件,尽管路径已经设置好了,原因时下面的宏没有打开
#define PKG_USING_ADE7913 #ifdef PKG_USING_ADE7913
5 studio下从HSI到HSE,将cubmx生成的SystemClock_Config 替换 drv_clk.c中的system_clock_config(target_freq)并将该函数的源代码屏蔽;同时在 STM32F4xx_HAL_CONF.H中修改HSE的值
void clk_init(char *clk_source, int source_freq, int target_freq) { //system_clock_config(target_freq); SystemClock_Config(); }
6 studio下SPI的使用,按照board.h中所说即可,不用显示调用HAL_SPI_MspInit(&hspix),有的地方自会调用