RT Thread Studio 配置OTA(亲测成功,巨详细)
用rt thread新建工程,我用的stm32f103vet6,stlink
首先配置外部时钟hse,可以直接复制以下代码到drv_clk.c中的void system_clock_config(int target_freq_Mhz),也可以自己在cubemx生成。
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
- in the RCC_OscInitTypeDef structure.
/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/* Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
{
Error_Handler();
}
配置spi,这个按board.h中的步骤来就行
这里我用的野火的f103指南者,w25q64是a5,a6,a7,不同的板子要在cubemx自己修改
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==SPI1)
{
/* USER CODE BEGIN SPI1_MspInit 0 */
/* USER CODE END SPI1_MspInit 0 */
/* Peripheral clock enable */
__HAL_RCC_SPI1_CLK_ENABLE();
/**SPI3 GPIO Configuration
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN SPI1_MspInit 1 */
/* USER CODE END SPI1_MspInit 1 */
}
}
然后配置rtc,按这个步骤来就行
标题在applications下创建flash.c,这里叫什么无所谓,把以下代码复制进去
#include "spi_flash_sfud.h"
#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>
rt_uint8_t wData[4096] = {"SPI bus write data to W25X flash."};
rt_uint8_t rData[4096];
extern rt_err_t rt_hw_spi_device_attach(const char *bus_name,
const char *device_name,
GPIO_TypeDef* cs_gpiox,
uint16_t cs_gpio_pin);
int spi1_device_init(void)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
//设备挂载到SPI总线,抽象为 spi10 设备
rt_hw_spi_device_attach("spi1", "spi10", GPIOC, GPIO_PIN_0);
if (rt_sfud_flash_probe("W25Q64", "spi10")) {
rt_kprintf("rt sfud flash probe success\n");
} else {
rt_kprintf("rt sfud flash probe fail\n");
};
return RT_EOK;
}
INIT_DEVICE_EXPORT(spi1_device_init);//自动初始化
rt_hw_spi_device_attach(“spi1”, “spi10”, GPIOC, GPIO_PIN_0);这行就是spi中的cs,如果用的引脚不同记得修改,和硬件上对应。编译,下载。