问题描述:程序“一样”,编译没有问题,但是功能不能实现,不能回显。
说明USART1波特率设置不成功
但USART1初始化程序“没问题”。
1.
朋友认为我的工程建立有问题,但我以前用同一模板建的工程都没有问题。
2.
确认是USART1配置肯定有问题。就把例程中正确的函数USART1_config()中的程序段复制到我写函数相同的位置。把原先我的程序屏蔽掉,再编译--->下载---->功能正常。
然后就是将两个程序段逐句主逐字地排除。
反思:为什么会出现这样的程序。
我的编程思想是 例如GPIO口的使用
第一步 定义结构体
第二步 打开相应的时钟线
第三步 对打开的GPIOx输入输出功能配置
第四步 打开该GPIOx(需要用到就打开,不需要(如复用功能)就不需要)
然后通过官方library 3.50 去获取相关的函数结构以及结构体的参数的枚举、examples等
后来发现相应的.C文件和.H文件都有大量的信息(stm32f10x_gpio.c and stm32f10x_gpio.h)。可以根据自己的需求复制粘贴,认为这样就可以摆脱的程序和自己以前编的。
但是自己复制的程序由于自己对底层程序不了解、C++知识匮乏(特别是宏,结构指针)所以没有做到针对性的粘贴修改。
上述错误的问题出现的就是误以为这是打开GPIOx相应时钟线的底层函数,结果这是Deinitialize GPIOx的函数。所以导致了.....这种以为“正确”的程序...还不知道哪里错了...
再反思:
自己的编程思想绝对是正确的,这样才能活用函数库开发,只是基本功不到位啊....
下次粘贴程序....一定得确保程序的匹配性....
关键字:stm32 串口通信
引用地址:
stm32串口通信困扰我两天的一个问题
推荐阅读最新更新时间:2024-03-16 15:43
基于CC2541蓝牙模块与单片机的串口通信
一、CC2541器件概述 CC2541是一款针对低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541将领先RF收发器的出色性能和一个业界标准的增强型8051MCU、系统内可编程闪存存储器、8kBRAM和很多其它功能强大的特性和外设组合在一起。CC2541非常适合应用于需要超低能耗的系统。这由多种不同的运行模式指定。运行模式间较短的转换时间进一步使低能耗变为可能 二、CC2541芯片的特性参数 CC2541是一款针对蓝牙低能耗以及私有2.4GHz应用的功率优化的真正片载系统(SoC)解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可
[单片机]
STM32串口接收中断溢出问题解决
在使用一个串口发数据的传感器过程中,发现程序第一次进入串口中断之后不再执行主函数的内容,中断中的内容也不执行。查询大量资料后发现:串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(ORE中断)。接下来是错误产生原因以及解决方法。 (1)什么是ORE中断?为什么会产生? 产生原因如上所述。 ORE标志位在USART_SR寄存器,但值得注意的是,当我们打开串口接收中断时,同时也就打开了ORE中断。 (2)如何解决? 看了上面的资料之后,我知道程序是死在了串口溢出中断。处理中断时,我首先想到的是清除这个中断标志位,但是遇到了很多麻烦。 清除ORE位的方法:顺序执行对USART_SR和USART_DR寄存器的读操作
[单片机]
STM32的下载及调试模式 接口
使用的最多的调试方式莫过于 JTAG 和SWD方式。 JTAG: JTAG (Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。相关JTAG引脚的定义为: TMS:模式选择,TMS用来设置JTAG接口处于某种特定的测试模式; TCK:时钟输入; TDI:数据输入,数据通过TDI引脚输入JTAG接口; TDO:数据输出,数据通过TDO引脚从JTAG接
[单片机]
stm32单片机GPIO端口的特点及应用解析
一、GPIO的综合描述 stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。 (一)每一个IO引脚都可以使用软件配置为以下几种模式: 1. 浮空输入 2. 带上拉输入 3. 带下拉输入 4. 模拟输入 5. 开漏输出——(此模式可实现hotpower说的真双向IO) 6. 推挽输出 7. 复用功能的推挽
[单片机]
STM32单片机基础03——使用GPIO点亮一个LED
本篇文章主要介绍如何使用STM32CubeMX初始化STM32L431RCT6的GPIO,并点亮一个LED。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是 STM32L4的开发板(BearPi) : 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码; Keil MDK和串口助手的安装包都可以关注“小熊派开源社区”微信公众号,在资料教程一栏中可获取安装包。 2.生成MDK工程 选择芯片型号 打开STM32CubeMX,打开MCU选择器: 搜索并选中芯片STM32L431RCT6: 配置时钟源 如果选择使用外部高速
[单片机]
STM32学习之路之入门篇
2006年ARM公司推出了基于ARMV7架构的cortex系列的标准体系结构,以满足各种技术得不同性能要求,包含了A,R,M三个分工明确的系列 其中A系列面向复杂的尖端应用程序,用于运行开放式的复杂操作系统;R系列适合实时操作系统,M系列专门针对低成本的微控制领域。而我们今天要学习的STM32就是M3的处理器 STM32(M3)处理器的基本结构,基本结构如图所示,主要包括处理器核cortex-m3 core,NVIC,BUS MATRIS,FLASH转换,及断点单元,DWT,ITM,MPU,ETM,TPIU,ROM Table SW/SWJ-DP等模块,其中MPU和ETM单元是可选单元。 这些单元可分为内外两个层次,
[单片机]
STM32的串口中断
总的来说,STM32单片机的串口还是很好理解的,编程也不算复杂。当然我更愿意希望其中断系统和51单片机一样的简单。 对于接收终端,就是RXNE了,这只在接收完成后才产生,在执行USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)代码时不会进入ISR。但麻烦的就是发送有关的中断了:TXE或者TC,根据资料和测试的结果,TXE在复位后就是置1的,即在执行USART_ITConfig(USART1, USART_IT_TXE, ENABLE)后会立即产生中断请求。因此这造成一个麻烦的问题:如果没有真正的发送数据,TXE中断都会发生,而且没有休止,这将占用很大部分的CPU时间,甚至影响其他程
[单片机]
单片机串口通信控制步进电机
这是一个来自单片机开发板的源程序,原理图的下载地址: http://www.51hei.com/f/ks51.pdf 下面是源代码: /** ************************************************************************************************* * @file main.c * @author xr * @date 2014年3月18日20:00:03 * @note 步进电机的参数:减速比:1:64 步进角:5.625/64 启动频率: =550 启动时间最小:1.08ms * @brief 串口通信控制步进电
[单片机]