• (个人杂记)第九章 串口实验1


    【原子哥的串口实验】stmf103串口实验串口助手没反应问题·个人实验测试

    串口实验是很重要的,如果你从事嵌入式开发、下位机等都很需要掌握的技能,这是一个前辈和我说的。
    之前遇到一个有意思的帖子,询问串口无法通信,运行了代码的确不能通讯。

    【解决方法】
    添加一句GPIO结构体的速度初始化
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz

    【测试过程】

    int main()
    {
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	USART1_Init();
    	while(1)
    	{
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    将所有的代码都复制了,运行后无法实现
    在这里插入图片描述
    我百思不得其解,然后我准备先点个led灯观察程序在运行吗,毕竟新手我也不会调试。

    int main()
    {
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	LED_Init();
    	USART1_Init();
    	while(1)
    	{
    //		LED0=!LED0;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    接下来神奇的一幕出现了,我以为是不是之前造成的影响特点测了好几次都是这样,而且我注释掉只剩下LED_Init()也是可以通信!我不知道问题出现在哪里。。
    在这里插入图片描述
    然后我观察了一下led和usart的区别后我发现,原来是没有定义GPIO速度,然后我加上这句话后就成功了!

    void USART1_Init(void)
    {
            GPIO_InitTypeDef        GPIO_InitStruct;
            USART_InitTypeDef       USART_InitStruct;
            NVIC_InitTypeDef        NVIC_InitStruct;
           
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
           
            GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
            GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;
    		GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
            GPIO_Init(GPIOA,&GPIO_InitStruct);
            GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
            GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
            GPIO_Init(GPIOA,&GPIO_InitStruct);
            USART_InitStruct.USART_BaudRate=115200;
            USART_InitStruct.USART_HardwareFlowControl=
    									USART_HardwareFlowControl_None;
            USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
            USART_InitStruct.USART_Parity=USART_Parity_No;
            USART_InitStruct.USART_StopBits=USART_StopBits_1;
            USART_InitStruct.USART_WordLength=USART_WordLength_8b;      
            USART_Init(USART1,&USART_InitStruct);                                                                   
            NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
            NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
            NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=1;
            NVIC_InitStruct.NVIC_IRQChannelSubPriority=1;
            NVIC_Init(&NVIC_InitStruct);       
            USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);		
    		USART_Cmd(USART1,ENABLE);                   //开启中断                                                                             //使能串口1
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    【教训总结】

    • 在学习过程中,不要一味的原本照抄示例代码,要带入思想,知道为什么要这么写,写错了不是一味对照是不是哪里抄错了,要自己多做测试,那怕测试半天也未发现问题,对自己的理解也有很大提升,直至获得解决方法。
    • 其次,对于结构体的一些成员变量初始化,尽可能全部写全,这是一种很好地习惯。多去解决问题,帮助别人,囫囵吞枣的学习也只有自我感觉良好,看看别人的疑惑,可能自己也存在,再去解决它。
    • 我可以学的很慢,但是我也应学的扎实!
  • 相关阅读:
    leetcode - 1877. Minimize Maximum Pair Sum in Array
    Spring注解之处理常见的 HTTP 请求
    外周传出神经的递质有,外周神经系统神经递质
    运动的人需要什么装备?运动健身装备推荐分享
    【Leetcode】211. 添加与搜索单词 - 数据结构设计
    《Go Web 编程》之第6章 存储数据
    数字ic验证门槛高吗?
    窗口函数笔记
    2. 验证面试高频问题整理(附答案)
    nodejs+vue流浪猫狗救助领养elementui
  • 原文地址:https://blog.csdn.net/canola_flowers/article/details/126122895