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輪流翻轉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章