RT-Thread Nano¶
RT-Thread Nano官方文档¶
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction
STM32移植¶
STM32CubeMX创建项目¶
选择与目标MCU对应的型号创建工程¶
Serial, JTAG设置¶
时钟设置¶
根据电路图,设置时钟
将频率调到最大,在HCLK直接输入72,软件会自己算
UART设置¶
LED配置¶
生成代码¶
初次编译¶
使用FLYMCU在线烧录
添加RT-Thread Nano¶
RT-Thread Nano源码的获取¶
rt-thread.org/download.html#download-rt-thread-nano
https://www.rt-thread.org/download.html#download-rt-thread-nano
添加RT-Thread代码¶
修改Makefile¶
C_SOURCES = \
$(wildcard rt_thread/src/*.c) \
rt_thread/libcpu/arm/cortex-m3/cpuport.c \
rt_thread/bsp/board.c \
Core/Src/main.c \
ASM_SOURCES = \
startup_stm32f103xe.s \
rt_thread/libcpu/arm/cortex-m3/context_gcc.s
C_INCLUDES = \
-Irt_thread/include \
-Irt_thread/bsp \
stm32f4xx_it.c去除3个函数¶
void PendSV_Handler(void)
void SysTick_Handler(void)
void HardFault_Handler(void)
修改函数入口¶
bl main 该成 bl entry
/* Call static constructors */
bl __libc_init_array
/* Call the application's entry point.*/
bl entry
bx lr
.size Reset_Handler, .-Reset_Handler
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
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();
}
}
#define RT_USING_CONSOLE
Ingenic移植¶
GCC_PATH = /mnt/d/WorkSpace/tools/toolchains/mips-gcc520-elf/bin