串口usart

#ifndef _H_IL_USART1_201611251016_H_
#define _H_IL_USART1_201611251016_H_

#include "il_system_configure.h"

#include <stdbool.h>
#include <stdint.h>

typedef enum {
    USART_STATE_CLOSED = 0,
    USART_STATE_OPENED = 1
}usart_state_t;

extern void usart1_init(void);
extern void usart1_open(void);
extern void usart1_close(void);
extern void usart1_send(uint8_t* ,uint16_t);

#endif // _H_IL_USART1_201611251016_H_

 

 

#include "il_usart1.h"

#include "stm32l4xx.h"
#include "stm32l4xx_hal.h"
#include "stm32l4xx_hal_gpio.h"
#include "stm32l4xx_ll_usart.h"
#include "il_wwdg.h"

#include <stdio.h>

    #if __GNUC__
        /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
        set to 'Yes') calls __io_putchar() */
        #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
    #else
        #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
    #endif /* __GNUC__ */

#if ENABLE_PRINT
    PUTCHAR_PROTOTYPE
    {
        /* Place your implementation of fputc here */
        /* e.g. write a character to the USART */
        uint16_t timeout = 512;
        while (!LL_USART_IsActiveFlag_TC(USART1) && timeout-->0){
            feed_dog();
        }
        LL_USART_TransmitData8(USART1, (uint8_t)ch);

        return ch;
    }
#else
    PUTCHAR_PROTOTYPE{
        return ch;
    }
#endif

typedef struct{
    USART_HandleTypeDef usart_handler;
    DMA_HandleTypeDef dma_handler;
}usart_t;

/**********************************************************************
* 函数名称: usart1_send()
* 功能描述: 
* 输入参数: void
* 输出参数: void
* 返 回 值: void
* 其他说明: void
* 修改日期       版本号     作者         修改内容
* -----------------------------------------------
* 2017.01.04     V1.0    Bruce Cheng     create
**********************************************************************/
void usart1_send(uint8_t* data, uint16_t length){
#if ENABLE_PRINT
    for (uint16_t idx = 0; idx < length; idx++){
        uint16_t timeout = 512;
        while (!LL_USART_IsActiveFlag_TC(USART1) && timeout-->0){
            feed_dog();
        }
        LL_USART_TransmitData8(USART1, data[idx]);
    }
#endif
}

/**********************************************************************
* 函数名称: usart1_init()
* 功能描述: 初始化打印串口
* 输入参数: void
* 输出参数: void
* 返 回 值: void
* 其他说明: void
* 修改日期       版本号     作者         修改内容
* -----------------------------------------------
* 2016.08.29     V1.0       Kous         添加注释
* 2016.11.02     V1.1       chf          移植至STM32L475
**********************************************************************/
void usart1_init(void){
#if ENABLE_PRINT
    __HAL_RCC_GPIOB_CLK_ENABLE();

    GPIO_InitTypeDef  GPIO_InitStructure;
    GPIO_InitStructure.Pin          = GPIO_PIN_6;
    GPIO_InitStructure.Mode         = GPIO_MODE_AF_PP;
    GPIO_InitStructure.Speed        = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStructure.Pull         = GPIO_NOPULL;
    GPIO_InitStructure.Alternate    = GPIO_AF7_USART1;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);

    LL_USART_DeInit(USART1);
    __HAL_RCC_USART1_FORCE_RESET();
    __HAL_RCC_USART1_RELEASE_RESET();
    __HAL_RCC_USART1_CLK_ENABLE();
    __HAL_RCC_USART1_CLK_SLEEP_ENABLE();

    LL_USART_InitTypeDef usart1ll;
    usart1ll.BaudRate               = 115200;
    usart1ll.DataWidth              = LL_USART_DATAWIDTH_8B;
    usart1ll.HardwareFlowControl    = LL_USART_HWCONTROL_NONE;
    usart1ll.OverSampling           = LL_USART_OVERSAMPLING_16;
    usart1ll.Parity                 = LL_USART_PARITY_NONE;
    usart1ll.StopBits               = LL_USART_STOPBITS_1;
    usart1ll.TransferDirection      = LL_USART_DIRECTION_TX;
    LL_USART_Init(USART1, &usart1ll);
    LL_USART_Enable(USART1);
#else
    usart1_close();
#endif
}

/**********************************************************************
* 函数名称: usart1_deinit()
* 功能描述: 反初始化打印串口
* 输入参数: void
* 输出参数: void
* 返 回 值: void
* 其他说明: void
* 修改日期       版本号     作者         修改内容
* -----------------------------------------------
* 2016.12.22     V1.0     Bruce Cheng     create
**********************************************************************/
void usart1_open(void){
#if ENABLE_PRINT
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_USART1_CLK_ENABLE();
    LL_USART_Enable(USART1);
#endif
}

/**********************************************************************
* 函数名称: ()
* 功能描述: 
* 输入参数: void
* 输出参数: void
* 返 回 值: void
* 其他说明: void
* 修改日期       版本号     作者         修改内容
* -----------------------------------------------
* 2016.12.22     V1.0     Bruce Cheng     create
**********************************************************************/
void usart1_close(void){
    __HAL_RCC_USART1_CLK_DISABLE();
    LL_USART_Disable(USART1);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值