精华内容
下载资源
问答
  • 中山大学_微机实验
  • 基于STM32F103ZET6的USB虚拟串口实验
  • FPGA蓝牙串口实验

    2020-10-04 20:57:57
    实验实现通过PC串口与hc05实现数据在PC和手机端之间的透传。当通过连接PC的uart给FPGA发送数据时,把这个收到的数据发到HC-05的发送模块,通过hc05_tx输出到蓝牙模块;而当手机端发给HC-05数据时,会通过rx_hc05...
  • 博文51单片机汇编语言实验(四)----串行通信实验(附参考代码及注释)的附件,包含文章介绍的内容的完整的工程文件
  • 串口助手接受到的十六进制序列按照一定的字节数转换为(float ,u16 ,signed 16),注意float的存储格式
  • 实验4 串口实验.rar

    2019-11-11 16:34:58
    单片机串口实验代码,stm32f407 单片机学习串口开发相关内容,包括stm32 库函数,欢迎下载 学习单片机编程参考
  • -/ 本科实验报告 实验名称 实验三 使用8251A的串行接口应用实验 课程名称 计算机原理与应用实验 实验时间 任课教师 实验地点 实验教师 实验类型 原理验证 综合设计 自主创新 学生姓名 学号/班级 组 号 学 院 同组...
  • 实验三 使用8251A的串行接口应用实验 二、实验目的 1) 掌握串行通信原理及半双工和全双工的编程方法; 2) 掌握用8251A接口芯片实现微机间的同步和异步通信; 3) 掌握8251A芯片与微机的接口技术和编程方法。
  • STM32F1实验2串口实验

    2017-08-15 20:01:26
    STM32F1实验2串口实验:STM32 通过串口和上位机的对话,STM32 在收到上位机发过来的字符串后,原原本本的返回给上位机。
  • 串口实验报告

    2015-06-07 14:17:20
    串口发送的51单片机实验程序代码,单片机发送,在电脑串行助手上接收并显示出来
  • 串口实验

    千次阅读 2018-10-08 21:56:23
    串口作为MCU的重要外部接口,同时也是软件开发重要的调试手段。 STM32F103RCT6最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工的单线通讯、支持LIN、支持调制解调操作、智能卡协议和IrDA SIR ...

    使用STM32的串口来发送和接受数据,STM32通过串口和上位机的对话,STM在收到上位机发过来的字符串后,原原本本的返回给上位机。

    1.STM32串口简介:

    串口作为MCU的重要外部接口,同时也是软件开发重要的调试手段。

    STM32F103RCT6最多可提供5路串口,有分数波特率发生器、支持同步单线通信和半双工的单线通讯、支持LIN、支持调制解调操作、智能卡协议和IrDA SIR ENDEC 规范、具有 DMA等。

    2.将实现的功能

    利用串口1不停的打印信息到电脑上,同时接收从串口发过来的数据,把发过来的数据直接送回给电脑。miniSTM32开发板板载了一个1个USB串口和1个RS232串口,此次实验主要通过USB串口和电脑通信。

    对于复用功能的IO,首先需要使能GPIO时钟,然后使能复用功能时钟,同时要把GPIO模式设置为复用功能对应的模式

    3.串口设置步骤:

    (1)串口时钟使能,GPIO时钟使能。

    (2)串口复位

    (3)GPIO端口模式设置

    (4)串口参数初始化

    (5)开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

    (6)使能串口

    (7)编写中断处理函数

    4.功能函数:

    1.串口时钟使能。串口是挂载在APB2下面的外设,所以使能函数为:

    RCC_APB8periphClockCmd(RCC_APB2Periph_USART1)

    2.串口复位。当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。复位的是在函数USART_DeInit()中完成:

    void USART_DeInit(USART_TypeDef*USARTx);//串口复位

    如果我们要复位串口1,方法为:

    USART_DeInit(USART1); //复位串口 1
    3.串口参数初始化。串口初始化是通过USART_Init()函数实现的,

    void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
    这个函数的第一个入口参数是指定初始化的串口标号,这里选择USART1。

    实现格式:

    USART_InitStructure.USART_BaudRate = bound; //波特率;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为 8 位数据格式
    USART_InitStructure.USART_StopBits = USART_StopBits_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); //初始化串口
    从上面的初始化格式可以看出初始化需要设置的参数为:波特率,字长,停止位,奇偶校验位,
    硬件数据流控制,模式(收,发)。我们可以根据需要设置这些参数。
    4.数据发送与接收。STM32的发送与接收是通过数据寄存器USART_DR 来实现的,这是一个双寄存器,包含了TDR和RDR。当像该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是 存在该寄存器内。

    STM32 库函数操作 USART_DR 寄存器发送数据的函数是:
    void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
    通过该函数向串口寄存器 USART_DR 写入一个数据。
    STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是:
    uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
    通过该函数可以读取串口接受到的数据。
    5.串口状态。串口的状态可以通过状态寄存器 USART_SR 读取。

     我们主要关注第5,6为RXNE和TC。

    RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并
    且可以读出来了。这时候我们要做的就是尽快去读取 USART_DR,通过读 USART_DR 可以将
    该位清零,也可以向该位写 0,直接清除。
    TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。如
    果设置了这个位的中断,则会产生中断。该位也有两种清零方式: 1)读 USART_SR,写
    USART_DR。 2)直接向该位写 0。
    读取串口状态的函数是:

    FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);
    这个函数的第二个入口参数非常关键,它是标示我们要查看串口的哪种状态,比如上面的
    RXNE(读数据寄存器非空)以及 TC(发送完成)。例如我们要判断读寄存器是否非空(RXNE),操
    作库函数的方法是:

    USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
    我们要判断发送是否完成(TC),操作库函数的方法是:
    USART_GetFlagStatus(USART1, USART_FLAG_TC);
    这些标识号在 MDK 里面是通过宏定义定义的
    #define USART_IT_PE ((uint16_t)0x0028)
    #define USART_IT_TXE ((uint16_t)0x0727)
    #define USART_IT_TC ((uint16_t)0x0626)
    #define USART_IT_RXNE ((uint16_t)0x0525)
    #define USART_IT_IDLE ((uint16_t)0x0424)
    #define USART_IT_LBD ((uint16_t)0x0846)
    #define USART_IT_CTS ((uint16_t)0x096A)
    #define USART_IT_ERR ((uint16_t)0x0060)
    #define USART_IT_ORE ((uint16_t)0x0360)
    #define USART_IT_NE ((uint16_t)0x0260)
    #define USART_IT_FE ((uint16_t)0x0160)
    6.串口使能。串口使能是通过函数USART_Cmd()来实现的

    USART_Cmd(USART1, ENABLE); //使能串口
    7.开启串口响应中断。当我们 需要开启串口中断,那么我们还需要使能串口中断,使能串口中断的函数是:

    void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,FunctionalState NewState)
    这个函数的第二个 入口参数是标示使能串口的类型,也就是 使能哪种中断,因为串口的中断类型有很多种。比如在接收数据的时候(RXNE读数据寄存器非空),我们要产生中断,那么我们开启中断的方法是:

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断,接收到数据中断
    在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是:

    USART_ITConfig(USART1, USART_IT_TC, ENABLE);
    8.获取相应中断状态。当使能了某个中断的时候,当该中断发生了,就会设置状态寄存器中的某个标志位。我们在中断处理函数中,要判断该中断是哪种中断,使用函数是:

    ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
    我们使能了串口发送完成中断,那么当中断发生了,我们便可以在中断处理函数中调用这个函数来判断到底是否串口发送完成中断,方法是:

    USART_GetITStatus(USART1, USART_IT_TC)
    返回值是SET,说明是串口发送完成中断发生。

     2.硬件设计

    1)指示灯DS0

    2)串口1

    串口1与USB串口并没有在PCB上连接在一起,这里我们把P4 的RXD和TXD用跳线帽与PA9和PA10连接起来。

    3.软件设计

    uart_int函数,该代码如下:

    //初始化 IO 串口 1
    //bound:波特率
    void uart_init(u32 bound)
    {
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    //①串口时钟使能, GPIO 时钟使能,复用时钟使能
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能 USART1,GPIOA 时钟
    //②串口复位
    USART_DeInit(USART1); //复位串口 1
    //③GPIO 端口模式设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //ISART1_TX PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //USART1_RX PA.10
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA.10
    //④串口参数初始化
    USART_InitStructure.USART_BaudRate = bound; //波特率设置
    USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为 8 位
    USART_InitStructure.USART_StopBits = USART_StopBits_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); //初始化串口
    #if EN_USART1_RX //如果使能了接收
    //⑤初始化 NVIC
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ; //抢占优先级 3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级 3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道使能
    NVIC_Init(&NVIC_InitStructure); //中断优先级初始化
    //⑤开启中断
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启中断
    #endif
    //⑥使能串口
    USART_Cmd(USART1, ENABLE); //使能串口
    }
    在 test.c 里面编写如下代码:

    #include "sys.h"
    #include "usart.h"
    #include "delay.h"
    #include "led.h"
    int main(void)
    {
    u8 t;
    u8 len;
    u16 times=0;
    delay_init(); //延时函数初始化
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组
    uart_init(9600); //串口初始化为 9600
    LED_Init(); //初始化与 LED 连接的硬件接口
    while(1)
    {
    if(USART_RX_STA&0x8000)
    {
    len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
    printf("\r\n 您发送的消息为:\r\n");
    for(t=0;t<len;t++)
    {
    USART1->DR=USART_RX_BUF[t];
    while((USART1->SR&0X40)==0);//等待发送结束
    }
    printf("\r\n\r\n");//插入换行
    USART_RX_STA=0;
    }else
    {
    times++;
    if(times%5000==0)
    {
    printf("\r\nALIENTEK MiniSTM32 开发板 串口实验\r\n");
    printf("正点原子@ALIENTEK\r\n\r\n\r\n");
    }
    if(times%200==0)printf("请输入数据,以回车键结束\r\n");
    if(times%30==0)LED0=!LED0;//闪烁 LED,提示系统正在运行.
    delay_ms(10);
    }
    }
    }
     

    展开全文
  • 关于嵌入式STM32系列型号芯片的功能,包含了该功能所用到的部件编程代码
  • 原子哥的stm32的串口实验代码。。。。。。。。。。。
  • 本代码采用STMcubeMX5.30和MDK5版本的开发环境,包含cubeMX工程文件和MDK5工程文件,arm嵌入式 C语言源代码 附开发环境的版本说明,STM32F429igt6/f767igt6/h743iit6原理图及全部器件全套资料免费提供,教学视频免费...
  • ALIENTEK STM32F103 串口实验
  • 实现串口,当你输入值时,可以返回。该串口非常简单对于初学者而言是非常适合你的
  • ADC模数转换 ARM stm32 keil5
  • ATMEGA16串口实验proteus仿真源文件(含C程序源码),包含proteus工程源文件,单片机C语言程序。proteus8.6可正常打开,仿真。
  • 模拟串口实验

    2019-04-30 18:12:41
    模拟串口,当单片机没有多余的串口时,这个时候又要必须要用到串口,此时就可以用到模拟串口了,该文档已经写好,验证通过的
  • 基于zigbee的串口实验

    2014-05-01 18:35:09
    基于zigbee传输协议的运用CC2530芯片来实现串口通讯,在电脑上用串口助手来显示。
  • ALIENTEK MINISTM32 实验3 串口实验 ,原点的开发包例程,实测能用,基于原点开发板,代码可用,
  • 电子-ALIENTEKMINISTM32实验3串口实验.zip,单片机/嵌入式STM32-F0/F1/F2
  • STM32战舰串口实验Serial port experiment of STM32 warship
  • 电子-实验4串口实验idle.rar,单片机/嵌入式STM32-F0/F1/F2
  • 电子-实验4串口实验.rar,单片机/嵌入式STM32-F0/F1/F2
  • 实验4 串口实验.zip

    2020-03-04 12:00:16
    实验4 串口实验.zip
  • 电子-ALIENTEKMINISTM32实验3串口实验.rar,单片机/嵌入式STM32-F0/F1/F2
  • 电子-串口实验.rar

    2019-09-05 18:54:36
    电子-串口实验.rar,单片机/嵌入式STM32-F0/F1/F2
  • STM32F103C8T6 例程正点原子 :模板+串口实验+滴答定时器 +独立看门狗+窗口看门狗
  • stm32串口通信实现多机通信,这是一个主机代码,从机代码可在此基础上进行修改。从机通过开发板上的按键选择要通信的主机。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,883
精华内容 17,153
关键字:

串口实验