STM32f103C8 使用cubemx移植rt-thread nano实现rt-kprintf和FinSH组件支持

 新建工程并进行基础硬件初始化,下边直接上图

 

 

 

选择,GENERATE CODE ,生成代码。在keil mdk中打开工程。 

二、UART使用查询方式实现rx和tx

2.1 修改board.c

增加头文件

#include "usart.h"

 

修改board.c文件的rt_hw_board_init()初始化函数为: 

/**
 * This function will initial your board.
 */
extern void SystemCoreClockUpdate(void);
extern HAL_StatusTypeDef HAL_Init(void);
void rt_hw_board_init()
{
   //为了和main起初生成的代码一致,这里需要使用main.c中调用的两个函数 
    HAL_Init();
    /* System Clock Update */
    SystemCoreClockUpdate();
    MX_USART1_UART_Init();
    /* System Tick Configuration */
    _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

    /* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif

#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}

2.2 修改uart.c

增加头文件的引用

/* USER CODE BEGIN 0 */
#include <rtthread.h>
/* USER CODE END 0 */

 增加uart.h中新增两个函数的声明

/* USER CODE BEGIN Prototypes */
char rt_hw_console_getchar(void);
void rt_hw_console_output(const char *str);
/* USER CODE END Prototypes */

 增加uart.h中新增两个函数的实现在uart.c中

/* USER CODE BEGIN 1 */
char rt_hw_console_getchar(void)
{
    int ch = -1;

    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
    {
        ch = huart1.Instance->DR & 0xff;
    }
    else
    {
        if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE) != RESET)
        {
            __HAL_UART_CLEAR_OREFLAG(&huart1);
        }
        rt_thread_mdelay(10);
    }
    return ch;
}	
void rt_hw_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char a = '\r';

    __HAL_UNLOCK(&huart1);

    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1);
        }
        HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1);
    }
}	
/* USER CODE END 1 */

 修改main.c,至关重要的一步:while循环中必须添加延时rt_thread_mdelay(1000)函数,否则FISH提示符不会出现,也就无法交互。

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <rtthread.h>//自己添加的引用
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
   rt_thread_mdelay(1000);//必须要有否者FISH不显示提示符
  }
  /* USER CODE END 3 */
}

使用putty连接单片机,FISH成功界面

后记:

在编译过程中出现如下对话框:

经在RT-Thread官方技术交流群1里咨询,得到众多好友的支持,特别感谢yangjie和Jacky为我指点,最后yangjie的方法可行,

在工程栏那个文件上面右键,查看该文件类型是不是汇编

 选择Assembly language file

 源码下载:

01_FISH HAL RTT-Nano 串口查询实现FISH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值