F407+RT-Thread(一)——快速入門
簡介
硬件是正點原子的F407探索者,軟件是Keil 5.26, RT-Thread是nano 3.1.3,參考的是《正點原子RT-Thread環境快速搭建入門教程》。
nano pack有兩種安裝方式,一是在IDE內安裝,二是在官網下載安裝文件手動安裝。本文采用的下載安裝文件,再進行安裝。pack的安裝和rt-thread的使用可以參考官網的基於 Keil MDK 移植 RT-Thread Nano,在這裏就不多說了。
選用正點原子的HAL實驗《實驗4 串口通信實驗》工程作爲基礎,在此之上按照入門教程一步一步來的。
相關程序源碼
修改stm32f4xx_it.c
註釋掉如下三個函數:
void HardFault_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
修改board.c
在rt_hw_board_init函數中,開啓
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);
在SysTick_Handler函數中,開啓
void SysTick_Handler(void)
{
/* enter interrupt */
rt_interrupt_enter();
rt_tick_increase();
/* leave interrupt */
rt_interrupt_leave();
}
修改startup_stm32f407xx.s
修改Heap_Size的大小
Heap_Size EQU 0x00000000
main.c
#include "sys.h"
#include "led.h"
#include <rtthread.h>
static struct rt_thread led0_thread; //線程控制塊
static struct rt_thread led1_thread;// //線程控制塊
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t rt_led0_thread_stack[1024];// //線程棧
static rt_uint8_t rt_led1_thread_stack[1024];//線程棧
//線程LED0
static void led0_thread_entry(void* parameter)
{
while(1)
{
LED0=0;
rt_thread_delay(RT_TICK_PER_SECOND/5);
LED0=1;
rt_thread_delay(RT_TICK_PER_SECOND/5);
}
}
//線程LED1
static void led1_thread_entry(void* parameter)
{
while(1)
{
LED1=1;
rt_thread_delay(RT_TICK_PER_SECOND/5);
LED1=0;
rt_thread_delay(RT_TICK_PER_SECOND/5);
}
}
int main(void)
{
LED_Init();
rt_thread_init(&led0_thread,
"led0",
led0_thread_entry,
RT_NULL,
&rt_led0_thread_stack[0],
sizeof(rt_led0_thread_stack),
3,
20);
rt_thread_startup(&led0_thread);
rt_thread_init(&led1_thread,
"led1",
led1_thread_entry,
RT_NULL,
&rt_led1_thread_stack[0],
sizeof(rt_led1_thread_stack),
3,
20);
rt_thread_startup(&led1_thread);
}
運行
下載後可以看到LED0和LED1輪流翻轉。