串口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
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
要实现串口 USART1 来实现数据收/发显示,您需要先配置 STM32 的 USART1 串口,并编写 C 代码控制串口的发送和接收。 以下是一个基本的 USART1 串口通信的示例代码,您可以根据自己的需求进行修改: ```c #include "stm32f10x.h" #include <stdio.h> #define USART1_DR_Base ((uint32_t)0x40013804) //USART1 Data register address void USART1_Init(void); void USART1_SendChar(char ch); void USART1_SendString(char* str); char USART1_ReceiveChar(void); int main(void) { USART1_Init(); //初始化USART1 while(1) { char data = USART1_ReceiveChar(); // 从串口接收数据 printf("Received data: %c\n", data); // 打印接收到的数据 USART1_SendString("Hello World\n"); // 发送数据到串口 } } void USART1_Init(void) { // 使能USART1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; // 设置波特率为9600 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 设置数据位为8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 设置停止位为1位 USART_InitStructure.USART_Parity = USART_Parity_No; // 设置校验位为无校验 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 硬件流控制禁用 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 使能发送和接收 USART_Init(USART1, &USART_InitStructure); // 初始化USART1 USART_Cmd(USART1, ENABLE); // 使能USART1 } void USART1_SendChar(char ch) { while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送缓冲区为空 USART_SendData(USART1, ch); // 发送数据 } void USART1_SendString(char* str) { while(*str) { USART1_SendChar(*str++); // 逐个发送字符串中的字符 } } char USART1_ReceiveChar(void) { while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); // 等待数据接收完毕 return USART_ReceiveData(USART1); // 返回接收到的数据 } ``` 在代码中,我们使用 STM32 的 Standard Peripheral Library(标准外设库)来控制 USART1 串口的收/发,其中 `USART1_Init()` 函数用于初始化 USART1 串口,`USART1_SendChar()` 函数用于发送一个字符到串口,`USART1_SendString()` 函数用于发送一个字符串到串口,`USART1_ReceiveChar()` 函数用于从串口接收一个字符并返回。 在调试时,您需要使用串口调试助手来查看数据的收/发情况。在调试助手中,您需要设置正确的串口号、波特率、数据位、停止位、校验位等参数,并打开相应的串口。当您发送数据到串口时,数据将会在调试助手中显示出来,同时,当从串口接收到数据时,调试助手也会显示出来。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值