BabyOS开源框架之三 -------------串口LOG输出

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();    
  }
}

很多例子教程,请关注微信公众号  “小豆子爱编程”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值