1、在b_hal.c文件下,初始化串口管脚
static void _bGPIO_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Enable GPIO TX/RX clock */
__GPIOA_CLK_ENABLE();
__USART1_CLK_ENABLE();
/* UART TX GPIO pin configuration */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* UART RX GPIO pin configuration */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* NVIC for USART */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(USART1_IRQn);
}
在stm32f0xx_it.c文件下
extern UART_HandleTypeDef huart1;
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
}
2、同样在b_hal.c文件下,初始化串口参数
static void _bUartInit()
{
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.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if(HAL_UART_Init(&huart1) != HAL_OK){}
}
void bHalInit()
{
_bSystemInit();
_bGPIO_Init();
_bSystickInit();
_bUartInit();
// Add code ...gpio init or some other functions
}
3、将串口输出格式化成log输出,在b_hal_uart.c文件下加入HAL_UART_Transmit发送函数
void bHalUartSend(bHalUartNumber_t uart, uint8_t *pbuf, uint16_t len)
{
switch (uart)
{
case B_HAL_UART_1:
HAL_UART_Transmit(&huart1, pbuf, len, 0xffff);
break;
case B_HAL_UART_2:
break;
default:
break;
}
}
4、至此串口已经关联了log输出,具体的功能,BabyOS在Module目录的b_mod_log.c中实现
5、在main函数中测试
void test()
{
static uint32_t i = 2;
i ++;
b_log("hello world!! %d \n",i);
}
int main(void)
{
SystemClock_Config();
bInit();
while (1)
{
BOS_PERIODIC_TASK(test, 1000);
bExec();
}
}
很多例子教程,请关注微信公众号 “小豆子爱编程”