打开主菜单

谷雨文档中心 β

更改

NBDK-L4:基础实验教程

添加2,962字节2019年2月26日 (二) 17:23
无编辑摘要
基础实验中的其他例程,大部分都是使用的相同的时钟配置函数,有特殊的时钟使用,将会在对应例程的源码详解中做针对性说明。
==== gyu_usart_isr.c ====
串口初始化函数,初始化串口协议串口初始化函数,初始化串口协议波特率115200,数据位8位,停止位1位,无校验位、无流控制。<syntaxhighlight lang="c++" line="1" start="47">
void MX_USART1_UART_Init(void)
{
_Error_Handler(__FILE__, __LINE__); // 如果初始化失败,进入错误处理任务
}
}
</syntaxhighlight>串口初始化函数,初始化串口时钟及串口引脚所在的GPIOA时钟,配置串口引脚硬件功能,使能串口中断。<syntaxhighlight lang="c++" line="1" start="76">
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{
// 定义GPIO结构体
GPIO_InitTypeDef GPIO_InitStruct;
// 判断选择的是否为USART1
if(uartHandle->Instance==USART1)
{
// 使能GPIOA引脚时钟(因为选择的TX和RX分别为PA9和PA10)
__HAL_RCC_GPIOA_CLK_ENABLE();
// 使能USART1时钟
__HAL_RCC_USART1_CLK_ENABLE();
// GPIO配置
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; // 选择USART1的TX和RX引脚(TX:PA9,RX:PA10)
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 推挽输出
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;// 引脚频率5-80MHz
GPIO_InitStruct.Alternate = GPIO_AF7_USART1; // 配置为USART1
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化引脚
// 配置USART1中断优先级
HAL_NVIC_SetPriority(USART1_IRQn, 10, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
}
}
</syntaxhighlight>初始化串口数据isrCfg结构,并且开始串口数据接收。<syntaxhighlight lang="c++" line="1" start="112">
void HAL_UARTISR_Init(void)
{
UartIsr_Init(&huart1);
HAL_UART_StartRece();
}
</syntaxhighlight>串口打印函数,串口TX采样中断方式打印数据。<syntaxhighlight lang="c++" line="1" start="127">
void HAL_UART_Write(uint8_t *pData,uint16_t size)
{
if(size == 0)
{
return;
}
if(pData == 0)
{
return;
}
HAL_UART_Transmit_IT(&huart1,pData,size);
}
</syntaxhighlight>启动串口接收的函数,串口RX采用中断方式接收数据。<syntaxhighlight lang="c++" line="1" start="148">
void HAL_UART_StartRece(void)
{
HAL_UART_Receive_IT(&huart1,UartIsr_GetBuf(),RECE_BUF_MAX_LEN);
}
</syntaxhighlight>串口轮询函数,用于处理接收一包数据的超时时间。<syntaxhighlight lang="c++" line="1" start="161">
uint8_t HAL_UART_Poll(void)
{
return UartIsr_Poll();
}
</syntaxhighlight>读取串口数据的函数,并且返回读取到的数据的长度。<syntaxhighlight lang="c++" line="1" start="175">
uint16_t HAL_UART_Read(uint8_t *buf,uint16_t size)
{
return UartIsr_Read(buf,size);
}
</syntaxhighlight>返回当前串口RX缓冲区中的数据长度。<syntaxhighlight lang="c++" line="1" start="188">
uint16_t HAL_UART_RxBufLen(void)
{
return UartIsr_Avail();
}
</syntaxhighlight>串口接收中断的回调函数,在这个回调函数中,我们需要开启串口接收中断,用于接收下一包的串口数据。<syntaxhighlight lang="c++" line="1" start="199">
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
HAL_UART_StartRece();
}
</syntaxhighlight>
 
==== gyu_uasrt_isr_ex.c ====
== 实验12-串口DMA ==
510
个编辑