历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2021年02月03日 | 关于MSP430单片机串口通信数据丢失问题

2021-02-03 来源:eefocus

研究摸索了接近一个星期,把所遇到的问题写出来以供参考。


最开始看一个官方的串口收发数据的示例,然后自己操作后收发数据老是会丢失一个数据,然后看User’s Guide,取消了函数收发的方法直接用寄存器操作,问题解决。


接下来写一个组帧协议,收发完全正常。但是看上去逻辑思维非常的杂乱不清晰,就想整理一下,就开始写函数,进行函数调用。好了,这下问题又来了,数据又会丢失。


接近一个星期研究,发现不是自己写的代码有问题,是官方示例的波特率配置问题。大家都知道波特率表示每秒钟传送的码元符号的个数,是衡量数据传输速率的指标,它用单位时间内载波调制状态改变的次数来表示。晶振为1MHz波特率为115200,我自己改成了9600,问题解决。如何配置波特率在User’s Guide里面有想要的答案,详阅即可。以此单片机MSP430FR2311为例波特率配置在586页:
Setting a Baud Rate
For a given BRCLK clock source, the baud rate used determines the required division factor N:
N = fBRCLK/Baud Rate
The division factor N is often a noninteger value, thus, at least one divider and one modulator stage is
used to meet the factor as closely as possible.
If N is equal or greater than 16, it is recommended to use the oversampling baud-rate generation mode by
setting UCOS16.
NOTE: Baud Rate settings quick set up
To calculate the correct the correct settings for the baud rate generation, perform these
steps:

  1. Calculate N = fBRCLK/Baud Rate [if N > 16 continue with step 3, otherwise with step 2]

  2. OS16 = 0, UCBRx = INT(N) [continue with step 4]

  3. OS16 = 1, UCBRx = INT(N/16), UCBRFx = INT([(N/16) – INT(N/16)] × 16)

  4. UCBRSx can be found by looking up the fractional part of N ( = N - INT(N) ) in table
    Table 22-4

  5. If OS16 = 0 was chosen, a detailed error calculation is recommended to be performe

更改后的波特率设置代码如下:
//Configure UART
//SMCLK = 1MHz, Baudrate = 9600
//UCBRx = 6, UCBRFx = 8, UCBRSx = 0x20, UCOS16 = 1
EUSCI_A_UART_initParam param = {0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 6;//UCBRx = 6
param.firstModReg = 8;//UCBRFx = 8
param.secondModReg = 0x20;//CBRSx = 0x20
param.parity = EUSCI_A_UART_NO_PARITY;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;//UCOS16 = 1;


推荐阅读

史海拾趣

友盟(AP)公司的发展小趣事

在追求商业成功的同时,友盟(AP)公司也积极履行社会责任,致力于可持续发展。公司关注环境保护、公益事业等方面的问题,积极参与相关活动和项目。同时,友盟还通过技术创新和产品优化,推动电子行业的绿色发展和数字化转型。这些努力不仅提升了公司的社会形象,也为其未来的发展注入了新的动力。

以上是关于电子行业里友盟(AP)公司发展起来的5个相关故事。这些故事从不同角度展现了友盟在技术创新、合作伙伴关系、市场拓展、人才团队建设以及社会责任等方面的努力和成就。当然,每个公司的发展都是一个复杂而多元的过程,这些故事只是其中的一部分。

CLARE公司的发展小趣事

CLARE公司的创业之路始于对电子行业深厚的技术积累和敏锐的市场洞察力。公司的创始人凭借其深厚的专业知识和经验,准确把握了行业的发展趋势,成功开发了一系列具有竞争力的电子产品。这些产品在市场上获得了良好的反响,为CLARE公司奠定了坚实的技术和市场基础。

DuPont公司的发展小趣事

为了进一步拓展电子市场,DuPont公司积极寻求与全球知名电子企业的合作。通过与国际知名品牌的战略合作,DuPont成功进入了多个重要的电子市场领域,如智能手机、平板电脑、汽车电子等。这些合作不仅为DuPont公司带来了广阔的市场空间,也促进了公司在电子领域的技术创新和产品升级。

Compex Corporation公司的发展小趣事

Compex Corporation的创立可以追溯到电子行业的早期阶段。自XXXX年成立以来,公司便致力于研发和生产高质量的单层电容器、电阻以及其他电子元件。初期,公司面临着激烈的市场竞争和技术挑战,但凭借其卓越的技术团队和不懈的努力,逐渐在市场中站稳了脚跟。公司不断推出创新产品,满足了客户对高质量电子元件的需求,逐渐赢得了客户的信任和市场份额。

American Technical Ceramics (ATC)公司的发展小趣事

Compex Corporation的创立可以追溯到电子行业的早期阶段。自XXXX年成立以来,公司便致力于研发和生产高质量的单层电容器、电阻以及其他电子元件。初期,公司面临着激烈的市场竞争和技术挑战,但凭借其卓越的技术团队和不懈的努力,逐渐在市场中站稳了脚跟。公司不断推出创新产品,满足了客户对高质量电子元件的需求,逐渐赢得了客户的信任和市场份额。

Ericsson公司的发展小趣事

Ericsson公司始终将创新作为企业发展的核心动力。从早期生产电话机、电话交换机到今天提供端到端全面通信解决方案以及专业服务,Ericsson不断定义电信行业“进步”的含义,并通过实现每一个“进步”引领全球电信业的技术发展与变革。特别是在移动通信领域,Ericsson一直处于领先地位,为全球所有主要移动通信标准提供设备和服务。

问答坊 | AI 解惑

C51单片机设计模拟I2C总线驱动程序

/********************************** I2C总线驱动 ************************************* 模块名:I2C总线驱动    型号:I2C 创建人:陈曦   日期:2005-6-15 修改人:陈曦   日期:2005-6-19 功能描 ...…

查看全部问答>

大家好!K型热电偶带冷端补偿信号放大电路谁有?

K型热电偶带冷端补偿信号放大电路谁有?…

查看全部问答>

KEIL下 LM3S9B92 将程序搬到SDRAM中运行 有人玩过没

有没有人试过,我现在.SCT中修改链接地址 LR_IROM 0x60000000 0x00030000 {     ;     ; Specify the Execution Address of the code and the&nb ...…

查看全部问答>

请问浮点程序定点化怎么做

是不是可以乘以一个数编程整数后来计算,还是应该怎么处理呢…

查看全部问答>

StreamClassGetPhysicalAddress函数调用出错,求助

windows的StreamClass驱动开发中,在minidriver中调用StreamClassGetPhysicalAddress( pHwDevExt, pSrb, pImage, SRBDataBuffer, &Length ); 返回的物理地址高32位和低32位都是一个很大的值,且与MmGetPhysicalAddress ( pImage )的结果不同,但用 ...…

查看全部问答>

51单片机串口通信以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来

/*以16进制发送一个0-65536之间的任一数, *当单片机收到后在数码管上动态显示出来,波特率自定。       */ //我写的程序发送第一个数便成功显示,此后但不行了。。 /*比如说我发fffe  数码管显示65534  &n ...…

查看全部问答>

makefile中ipk文件有什么用?

请问:makefile中ipk文件有什么用?     有时执行make时必须提前删除某些ipk文件,否则自己的修改内容就不会被编译,这是为什么呀?ipk文件究竟是干什么用的,有什么作用?     求解,或者给个链接可以找到答案。。。谢谢。 ...…

查看全部问答>

学习单片机,什么书好?

学习单片机编程思想用哪本教科书好点? 我汇编语言和C语言都还算过的去``` 就是对于硬件接口编程控制不明白 51就行…

查看全部问答>

为什么用直联线也可以通呢?

我们开发的嵌入式设备两台间用直连线和交叉线都可以通,谁知道原因呢?我用的是Realtelk的8201网卡芯片?…

查看全部问答>

用电脑控制电灯

大家好,我想请教一下:    我是在读大学生,想做一个用电脑控制控制电灯的咚咚,虽然好像很简单,但是我从来没有接触过,所以想从头学一下,不知可否有高手指点一下。听说用电脑的串口,接max232+继电器就可以,可是我还是不知道如何把 ...…

查看全部问答>