1.FreeRTOS_编写调试代码

本章内容主要实现从官网上下载一个FreeRTOS例程,并去做一些简单的程序改写,实现串口调试的功能。例程以STM32F103为例。

经过本次设计,可以在实现串口输出UART TEST。但这还没有使用FreeRTOS

获取一个FreeRTOS例程

下载方法

到FreeRTOS官网,点击下载

选择第一个进行下载

找到例程源码

接下来是找到例程源码的路径,以STM32F103为例

路径为:\FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil

其中FreeRTOSv202212.01是官网下载的包

打开工程,提示如下信息,点击红框选项,这是将原文件的KEIL4更新为KEIL5

更新完成后,重新打开工程。编译0错误0警告

修改官方源码

由于没有官方的LCD,所以改用串口来进行调试。

为了防止很多的错误,这里并不删除LCD相关的内容,只对main进行修改和添加自己的串口调试代码。

注意:这种方法当然是会存在大量冗余代码,但该文章的目的是快速搭建一个可以进行调试FreeRTOS例程,而不是注重怎么修改源码。

main函数修改

在main函数中只保留两个函数,这之间的函数注释掉

修改之后编译,有两个定义了但未使用的警告,不用在意。

添加串口初始化代码

在工程文件的Demo Files的serial.c中进行添加串口初始化代码。

同样,这里并不删除serial.c的任何东西,也会产生大量冗余,但这不妨碍调试。

具体初始化代码如下(直接复制即可):

void SerialPortInit(void)
{
	USART_InitTypeDef USART_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;

	/* Enable USART1 clock */
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE );

	/* Configure USART1 Rx (PA10) as input floating */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init( GPIOA, &GPIO_InitStructure );

	/* Configure USART1 Tx (PA9) as alternate function push-pull */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init( GPIOA, &GPIO_InitStructure );

	USART_InitStructure.USART_BaudRate = 115200;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_Parity = USART_Parity_No ;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_InitStructure.USART_Clock = USART_Clock_Disable;
	USART_InitStructure.USART_CPOL = USART_CPOL_Low;
	USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
	USART_InitStructure.USART_LastBit = USART_LastBit_Disable;

	USART_Init( USART1, &USART_InitStructure );

	USART_Cmd( USART1, ENABLE );
}

将上述代码添加到下图的位置

在.c添加完成之后:

  • 在serial.h中去声明一下这个函数
  • 在main的prvSetupHardware函数之后调用该函数

改写fputc

fputc在源码中已经改写过了,这里需要查找到原来的fputc把它删除掉。之后在serial.c中重新编写

将fputc添加到SerialPortInit函数之前

具体代码如下:

int fputc( int ch, FILE *f )
{
	USART_TypeDef* USARTx = USART1;
	while((USARTx->SR & (1<<7)) == 0);
	USARTx->DR = ch;
	return ch;
}

最终main函数

int main( void )
{
#ifdef DEBUG
  debug();
#endif

	prvSetupHardware();
	SerialPortInit();
	printf("UART TEST\r\n");

	vTaskStartScheduler();
	
	return 0;
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值