1.配置时钟
RCC时钟树如下:
根据电路需求,如果选择外部时钟需要配置STM32CubeMX的RCC为HSE LSE,如果内部时钟,时钟树配置为HSI LSI,选择内部时钟如下:
2.配置DEBUG
烧录方式配置为SWD方式,需配置如下:
3.配置串口
配置为异步模式,参数设置,勾选NVIC优先级分组,如下:
4.工程配置 Project Manager
5.生成代码
生成代码默认不开中断,初始化时需打开中断,程序才会进入中断函数。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* 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_USART2_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 */
}
/* USER CODE END 3 */
}
串口回调函数调用:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART1)
{
if(HAL_UART_Receive_IT(&huart1,(uint8_t*)&rx, sizeof(rx)) == HAL_OK)
{
InterverDataHandle.g_su8RxBuf[InterverDataHandle.g_su8RxCnt] = rx;
InterverDataHandle.g_su8RxCnt++;
if(InterverDataHandle.g_su8RxCnt >= PS_MODULES_RX_LEN)
{
InterverDataHandle.g_su8RxCnt = 0;
}
InterverDataHandle.g_sbUartItFlag = 1;
}
}
}
printf重定向
c语言中printf函数默认输出设备是显示器,如果实现在串口或者LCD上显示,必须重定义标准库函数里面调用的输出设备定义的相关函数。
如果printf输出到串口,需要将fputc里面的输出指向串口,这一过程称为重定向。
printf函数位于标准库中,基于嵌入式的printf同样位于MicroLIB中,在嵌入式系统中使用printf函数,需要添加MicroLIB。
#include <stdio.h>
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1,0xFF);
return ch;
}
注意闭坑:
如果要调用中断函数,初始化时需打开中断。
调用printf函数时,需勾选MicroLIB库。