前言:
st这两年推出了一款超低功耗的芯片,stm32l4xx系列,该系列芯片有着功耗低,尺寸小等特点,非常适合应用在可穿戴式设备。
团队在这一领域深耕,所以不可避免的要用到这款芯片,这里就针对该芯片做一些技术总结。
硬件:
串口的的硬件非常简单,这里我们用串口1做日志打印,对应的硬件接口就如图所示了。这里的PA9 P10是对应的串口1的tx和rx
软件:
1 串口初始化,串口初始化一般是初始化一些串口状态,代码如下所示:
huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; //huart1.Init.Mode = UART_MODE_RX;//UART_MODE_TX_RX; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); }
2 IO映射,这部分一般需要自己配置,很容易漏掉。
void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(huart->Instance==USART1) { /* USER CODE BEGIN USART1_MspInit 0 */ /* USER CODE END USART1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_USART1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**USART1 GPIO Configuration PA9 ------> USART1_TX PA10 ------> USART1_RX */ //GPIO_InitStruct.Pin = GPIO_PIN_10;//GPIO_PIN_9| GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART1; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
3 打印函数:
该函数是串口输出底层函数,经常看到的printf都是映射过来的。
uint8_t data[30] = "welcome to whale_audio_v12 \n\r";
HAL_UART_Transmit(&huart1, data, sizeof(data), 0xffffffff);
这里有一个映射函数,一定要重写,不然,printf是使用不了的
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ int fputc(int c, FILE *stream) //重写fputc函数 { /* huart1是工具生成代码定义的UART1结构体, 如果以后要使用其他串口打印,只需要把这个结构体改成其他UART结构体。 */ HAL_UART_Transmit(&huart1, (unsigned char *)&c, 1, 1000); return 1; }