野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 488|回复: 1

霸天虎串口一上电先发与设置无关的码

[复制链接]
发表于 2025-2-8 13:20:16 | 显示全部楼层 |阅读模式
开发板 霸天虎 stm32407

串口:板载USB转串口
描述:跟着视频学习串口发送一个字节,视频上的内容是复位一下发一个字节,我把它修改了,上电就连续发送0x41
问题:将程序下载在学习板后,希望连续发送0x41,但是我关掉开发板电源,在打开它后,串口调试助手收到的码是
66 66 66 66 66 66 41 41 41 41 41 41......
         我将视频后的例程修改了以后,还是一样,只是前面的'66'可能长度不一样,我将DAP仿真器拔掉也一样。
下面是我的程序

#include "bsp_usart.h"

static void Usart_GPIO_Config(void)
{
        /*开启时钟,GPIOA*/
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
        /*定义初始化结构体*/
        GPIO_InitTypeDef GPIO_InitStruct;
        /*第三步 配置GPIO初始化结构体成员*/
        /*PA9是TX发送端口*/
        GPIO_InitStruct.GPIO_Mode =GPIO_Mode_AF;  //设置为复用模式
        GPIO_InitStruct.GPIO_OType =GPIO_OType_PP; //设置为推挽输出
        GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;  //波特率为11.0952,端口的速度也得跟上
        GPIO_InitStruct.GPIO_PuPd  =GPIO_PuPd_UP ;//设置为上拉模式
       
        /*第四步 调用GPIO初始化函数,把配置好的结构体成员的参数写入寄存器*/
        GPIO_InitStruct.GPIO_Pin =GPIO_Pin_9;//也可以将不同的引脚分别进入初始化函数
  GPIO_Init(GPIOA , &GPIO_InitStruct);
       
        /*PA10是RX读端口,配置成复用*/
  GPIO_InitStruct.GPIO_Pin =GPIO_Pin_10;//也可以将不同的引脚分别进入初始化函数
  GPIO_Init(GPIOA , &GPIO_InitStruct);
        /*407复用功能不分输入输出*/
        /*第五步:GPIO到底复用成什么功能*/
        /*PA9连接到串口1的发送,PA10连接到串口1读取*/
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
       
}
static void NVIC_Config(void)
{       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置分组
         NVIC_InitTypeDef NVIC_InitStruct;
         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =1; //主优先级
         NVIC_InitStruct.NVIC_IRQChannelSubPriority =1;   //子优先级
         NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE ;      //使能
         NVIC_InitStruct.NVIC_IRQChannel =USART1_IRQn ; //选择中断源
         NVIC_Init(&NVIC_InitStruct);
         
}
void USART_Config(void)
{
         Usart_GPIO_Config();
         /*第一步,开启USART1串口时钟*/
         RCC_APB2PeriphClockCmd (RCC_APB2Periph_USART1 ,ENABLE );
//         /*第二步,配置USART1串口结构体*/
            //USART_InitTypeDef USART_InitStrutre;
            USART_InitTypeDef USART_InitStructure;
//          USART_InitStrutre.USART_BaudRate=115200;  //波特率
//          USART_InitStrutre.USART_HardwareFlowControl=USART_HardwareFlowControl_None;  //硬件流
//          USART_InitStrutre.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;  //输出模式与输入模式
//          USART_InitStrutre.USART_Parity=USART_Parity_No; //无奇偶校验
//          USART_InitStrutre.USART_StopBits=USART_StopBits_1 ; //一位停止位
//          USART_InitStrutre.USART_WordLength  =USART_WordLength_8b ;//数据位8位
//          USART_Init(USART1,& USART_InitStrutre);
                /* 第二步:配置串口初始化结构体 */
          /* 使能 USART 时钟 */

          /* 配置串DEBUG_USART 模式 */
  /* 波特率设置:DEBUG_USART_BAUDRATE */
  USART_InitStructure.USART_BaudRate = 9600;
  /* 字长(数据位+校验位):8 */
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  /* 停止位:1个停止位 */
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  /* 校验位选择:不使用校验 */
  USART_InitStructure.USART_Parity = USART_Parity_No;
  /* 硬件流控制:不使用硬件流 */
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  /* USART模式控制:同时使能接收和发送 */
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* 完成USART初始化配置 */
  USART_Init(USART1, &USART_InitStructure);
        /*第三步 开启接收中断*/
          USART_ITConfig(USART1,USART_IT_RXNE,ENABLE );
        /*第四步 开启中断*/
          NVIC_Config();
        /*第五步 开启串口*/
          USART_Cmd(USART1 ,ENABLE );
       
}

/*发送一个字节*/
void USART1_SendData(uint8_t data)
{
        USART_SendData (USART1, data);
        while( USART_GetFlagStatus(USART1, USART_FLAG_TXE)==RESET);
}
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
        /* 发送一个字节数据到USART */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送数据寄存器为空 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}


#include"stm32f4xx.h"
#include"bsp_led.h"
#include"bsp_key.h"
#include"bsp_exti.h"
#include"bsp_base_tim.h"
#include"bsp_usart.h "
#include<math.h>
#include<stdarg.h>
uint16_t flag;
int main(void)
{

        /*在这里添加你自己的程序,下面两个是初始化程序*/
        //GPIO_LED_Config();
        flag=0;
        USART_Config();
        //USART_SendData(USART1 ,0x41);
//        Usart_SendByte(USART1,0X41);
        while(1)
        {
   Usart_SendByte(USART1,0X41);
        }
}

图片里是开机收到的字符

QQ20250208-131927.png
回复

使用道具 举报

发表于 2025-2-10 17:55:55 | 显示全部楼层
看复位的时候有没有复现这个情况,断电上电的,可能是电压的问题。看复位能不能复现,debug来看运行到什么语句会打印
回复 支持 反对

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-4-4 17:00 , Processed in 0.184451 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表