历史上的今天
今天是:2024年09月12日(星期四)
2018年09月12日 | STM32L0开发笔记12: 串口不能正确发数的解决方法
2018-09-12 来源:eefocus
今天这个问题一定要记录下来,使用485总线时,串口不能正确发送数据。串口的驱动程序已应用在多个实际项目中,自己并未认识到串口的驱动程序会有什么问题,而且在STM32F0芯片中,已经使用过了485,那时很是正常,所以这次问题的出现,倍感以外。
先说一下现象,使用485向计算机发数,计算机接到的全部都是0x00,开始怀疑很多问题,例如连线焊接等,一一排除,不能解决。使用示波器进行查看,发现单片机发送的数据就是这样的,很是奇怪。好在线路板设计时,单片机所在的线路板可以取下,将其插在带有USB转串口的板子上,发现一切正常。这说明单片机所在的电路是没有问题的,应该在外设板上。继续查找原因,直到将外设板上的所有元器件全部都焊下,也没有解决。再次比较485和USB转串口板,只剩下USB转串口芯片了,将这个芯片焊下后,USB转串口板也同样呈现这个问题。
用示波器查看串口的发送端,可以是高电平,但串口的接收端一直是低电平。此时开始怀疑电平问题,当有芯片存在时,将串口的接收端上拉到高电平,所以串口收发正常,当没有芯片时,接收端悬空,反复触发接收中断,所以串口异常。
但是F0的芯片,为什么可以呢?打开原先的程序看一下配置。
F0配置:
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF2_USART6;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
L0配置
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
这样一看就很明显了,STM32CubeMX在生成F0代码时,引脚是上拉的,但是L0没有上拉,将此代码更正后,一切正常。
所有的代码都是人写的,无论他的水平有多高,也有犯错误的时候
史海拾趣
|
十天学会PIC单片机 共有13讲,目录如下 前言: 时间:15分。 内容:MPLAB、PICC软件的安装与配置设置、USB下载驱动安装。 Lesson1: 时间:1小时44分。 内容:PIC单片机简介、软件使用方法、新建工程、软件调试、流水灯程序实现。 Lesson2: ...… 查看全部问答> |
|
如何把snetcfg.exe 和 net.inf net_m.inf driver.sys 四个文件以资源的形式放到一个exe程序中 ?? 大侠们帮忙?? 如何把snetcfg.exe 和 net.inf net_m.inf driver.sys 四个文件以资源的形式放到一个a.exe程序中 ?? 这样我就可以通过控制a.exe 文件来安装 卸载 我的driver.sys 驱动程序。 我不希望用户看到我的snetcfg.exe 和 net.inf net_m.inf&n ...… 查看全部问答> |
|
现在有个项目要在单片机上开发个控制程序,以前没用过想了解一下。 我看一般的单片机片内ram只有4-8kB,那运行在单片机上的代码是在片内flash上读取运行的是吗?就是flash上读一条运行一条,而不象有些嵌入式系统要将代码全部拷贝到ram内再运行是 ...… 查看全部问答> |
|
我刚买了一个KINGSTON的U盘后在一个同事的电脑上用FAT格式化后,取下,然后将其插在一台USB接口被屏蔽的机子上,机子检测结果是“硬件不可用\",后直接将其取下,之后这个U盘在其它没有屏蔽的电脑上都不能用的(插上之后电脑检测不到)。那位高人知 ...… 查看全部问答> |
|
一、引言阵列信号处理作为数字信号处理领域的一个重要分支,广泛应用于雷达、声纳、通信、地震勘探和医用成像等众多领域;短波频段则常用于短波测向和波束合成技术。在短波频段,阵列信号处理设备通常包括短波天线阵、短波多波道接收机、后端阵列信 ...… 查看全部问答> |
|
我的 STM32 到底跑多快? 我在 STM32F103RB 的开发板上, 写如下代码: uint32_t x = 0x009CF260, y; while (1) { if (--x ==0) { x = 0x009CF260; y = 1; & ...… 查看全部问答> |
|
一执行FLASH->ACR|=(uint32_t)FLASH_ACR_LATENCY_2就HardFault了? 本想将程序在flash中调试,因为之前一直在内部sram运行。 跳线啊,一些ROM/RAM地址啊 其他设置都弄好后 开始调试啦。结果发现一执行到FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2就HardFault了 这句在system_stm32f10x.c文件的static vo ...… 查看全部问答> |




