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