第3.2 章 SYSTEM文件夹介绍(二)

第三章 SYSTEM文件夹介绍(二)

1. sys文件夹代码介绍

sys 文件夹内包含了 sys.c 和 sys.h 两个文件。在 sys.h 里面定义了 STM32F4 的时钟配置等函数。 sys.c 里面主要是一些汇编函数。

2. usart文件夹介绍

usart 文件夹内包含了 usart.c 和 usart.h 两个文件。这两个文件用于串口的初始化和中断接收。这里只是针对串口 1,比如你要用串口 2 或者其他的串口,只要对代码稍作修改就可以了。 usart.c 里面包含了 2 个函数一个是 void USART1_IRQHandler(void);另外一个是void uart_init(u32 bound);里面还有一段对串口 printf 的支持代码,如果去掉,则会导致 printf无法使用,虽然软件编译不会报错,但是硬件上 STM32 是无法启动的,这段代码不要去修改。

2.1 printf函数支持

这段引入 printf 函数支持的代码在 usart.c 文件的最上方,这段代码加入之后便可以通过 printf 函数向串口发送我们需要的内容,方便开发过程中查看代码执行情况以及一些变量值。这段代码如果要修改一般也只是用来改变 printf 函数针对的串口号,大多情况我们都不需要修改。这段代码为:

// 加入以下代码,支持 printf 函数,而不需要选择 use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
// 标准库需要的支持函数
struct __FILE
{
    int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
sys_exit(int x)
{    
    x = x;
}
// 重定义 fputc 函数
int fputc(int ch, FILE *f)
{
    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
    USART_SendData(USART1,(uint8_t)ch);
    return ch;
}
#endif

2.2 uart_init函数

void uart_init(u32 bound)函数是串口 1 初始化函数。该函数有 1 个参数为波特率,波特率这个参数对于大家来说应该不陌生,这里就不多说了。 uart_init 函数代码如下:

// 初始化 IO 串口 1
// bound:波特率
void uart_init(u32 bound){
    // UART 初始化设置
    UART1_Handler.Instance = USART1; // USART1
    UART1_Handler.Init.BaudRate = bound; // 波特率
    UART1_Handler.Init.WordLength = UART_WORDLENGTH_8B; // 字长为 8 位数据格式
    UART1_Handler.Init.StopBits = UART_STOPBITS_1; // 一个停止位
    UART1_Handler.Init.Parity = UART_PARITY_NONE; // 无奇偶校验位
    UART1_Handler.Init.HwFlowCtl = UART_HWCONTROL_NONE; // 无硬件流控
    UART1_Handler.Init.Mode = UART_MODE_TX_RX; // 收发模式
    HAL_UART_Init(&UART1_Handler); // HAL_UART_Init()会使能 UART1
    HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);
    // 该函数会开启接收中断:标志位 UART_IT_RXNE,并且设置接收缓冲以及接收
    // 缓冲接收最大数据量
}

2024.10.5 第一次修订,后期不再维护

posted @ 2024-10-05 10:19  hazy1k  阅读(16)  评论(0编辑  收藏  举报