发 帖  
原厂入驻New
[问答]

【高手问答】从事单片机软硬件开发15年的工程师们,与您探讨单片机软硬件设计

12319 单片机 PCB 电路设计
分享
编者导读:本期我们邀请了单片机/MCU 版主@张飞电子学院蔡琰 @张飞电子学院张角 @张飞电子学院黄忠,来解答大家在单片/MCU设计上遇到的问题。

高手简介:

黄忠社区之星.jpg
黄忠:张飞实战电子FOC和硬件课程讲师,有多年软硬件设计和产品研发经验,擅长原理图、PCB-Layout设计。对电机驱动器的软硬件设计有深刻的理解。著有《无人机遥控器课程 》、《90天线上硬件课程部分视频》、《FOC线上课程部分视频》等作品。同大家一起交流学习单片机产品设计、研究电机驱动控制。

张角社区之星.jpg
张角:张飞实战电子鸿蒙系统嵌入式实时操作系统以及Risc-V单片机课程主讲老师。专注单片机程序开发、鸿蒙系统驱动及应用开发,以及Linux系统驱动及应用开发工作。同时对硬件电路设计、buck电源设计以及电机驱动设计有着丰富的行业经验。

蔡琰社区之星.jpg
蔡琰:张飞实战电子单片机课程讲师,专注单片机产品研发15年+。对单片机底层结构和编程语言有深入的理解。对单片机通信模块的产品应用开发有大量的研发经验。热爱单片机教学工作,讲课细致入微,通俗易懂。
从事MCU单片机方案的开发多年,包括51核ARM核,各种应用:
1、物联网通信系统;
2、BMS管理
3、回收机项目;
4、无人机项目;
5、国内领先的RISC-V架构单片机的鸿蒙项目设计;
6、远程抄表系统;

如何提问:在帖子下方回复你想要问的问题,逻辑清晰,也可以附带图片或附件,并@张飞电子学院蔡琰 @张飞电子学院张角 @张飞电子学院黄忠



2
2021-3-2 16:58:38   2 评论 分享淘帖 邀请回答
2 条评论
  • 2021-3-4 11:00

    老师们好,我想请问下在单片机编程中,我看到好多使用联合体加结构体的方式,这样使用的目的是基于什么考虑的啊?

    蔡琰 回复 weizhang: 2021-3-5 11:28

    结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
    结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
    当两者联合使用时结构体内定义共用体时,用结构体成员来方便引用共用体成员,尤其单片机编程中的比较多,这样既能用不同数据类型的变量,又能节省空间,一般用作临时变量,无需保存等就可以在结构体中定义共用体,也可以共用体中定义结构体。最终要根据实际情况来定义。

11个回答
欢迎三位资深的单片机工程师,大家有问题可以积极提问啊!
2021-3-2 17:35:14 评论

举报

老师们好,想请教一下以下问题:
CCS8.2生成HEX文件时勾选了image mode 报错:-image requires ROMS directive null,有两个问题:
1.如何在CCS8.2中加入ROMS {org = 0x30000,len = 0x7e00}
2.我使用HEX2000 分别用image 模式和非image模式,两种方式生成的HEX文件的数据区内容不一样,按道理有没有image模式,生成的HEX文件中的数据区内容应该是一样的,什么原因?
2021-3-2 17:38:13 2 评论

举报

2 条评论
  • 2021-3-3 17:54

    1.在帮助手册中搜索Select image mode 对应11.9.1章节,Generating a Memory Image 有关于这个模式的描述,在使用这个模式的时候一定要使用ROMS指令,来指定内存范围。所以这个一定要配合具体的程序来实现。

  • 2021-3-3 17:57

    image 模式和 非image 模式内存空间的连续性是不一样的,所以生成的HEX内容应该也是不一样的。

各位老师好,我做了一个设计(数字电压表),程序编译后无错误无警告。但是液晶显示的实际结果会出现一些错误。请问您可以帮我看一下是哪儿错了吗?
不好的实际结果是:1.电压会出现乱码;2.开机显示信息后,有时会无电压显示;3.mV量程的超限指示和报警功能没有实现。
您看得出问题在哪儿吗?
A2开发板原理图.rar (130.42 KB, 下载次数: 11 )

电压表.rar (52.34 KB, 下载次数: 12 )

2021-3-2 17:47:23 1 评论

举报

1 条评论
  • 2021-3-2 22:31

    你的问题很普遍的复杂,因为导致问题的原因可能有很多,既可能是硬件原因,也可能是软件原因,还有可能是系统不稳定造成的,不是几句话可以说得清楚的,你可以把板子和功能说明书一起寄给我,我们一起找问题。

PIC18F87J11想要实现ECCP1输出PWM,ECCP2输入捕获要如何实现?
最好是ECCP1和ECCP2时基共用一个定时器3或者共用定时器4 ,我在手册上没有找到这一块的时钟源应该如何配置,目前我程序的现状是如果同时开了PWM和捕捉,PWM无输出,只有捕捉能正常捕捉。如果单独只开一个PWM或者捕捉是正常的。
请老师帮忙看一下是什么原因














2021-3-2 17:56:17 1 评论

举报

1 条评论
  • 2021-3-2 22:26

    前面图中18.1.4中明确说明,ECCP模块在选择捕获和PWM功能这两种情况下,是不能共用同一个定时器作为时钟的,如果你希望这两个功能的输入时间相同,你可以选择两个不同的定时器作为时钟,并将这两个定时器的时钟设为一致相同即可。

在 demo 板上采样电压时,不稳定,采样结果有波动,如何消除?
2021-3-3 10:52:04 1 评论

举报

1 条评论
  • 2021-3-3 11:48

    ①一般来说,仿真器都是工作在一个稳压的环境(通常为 5V)。如果用仿真
    器的 A/D 时,要注意其 A/D 参考电压是由仿真器内部给出,还是需要外部提供。
    ②A/D 转换需要一个连续的时钟周期,所以在仿真时不能用单步调试的方法,否
    则会造成 A/D 采样值不准。
    ③至于 A/D 采样不稳定,可以在 A/D 输入口加一电容,起到滤波作用;在软件
    处理时采用中值滤波的方法。

在车载 DVD 系统中,如何设计电子防震系统?
2021-3-3 10:54:45 1 评论

举报

1 条评论
  • 2021-3-3 11:49

    在车载 DVD 系统,最好选择高档 DVD 机,因为高档 DVD 机都采用电子防
    震系统(ADVANCEDESP),当记忆缓冲区内的读数降低,先进的电子防震设计会
    以双速读数系统,做出比正常速度快两倍的读数速率,以减低噪声,即使连续震
    荡仍可避免跳线情况出现,现在就说说什幺叫电子防震。简单地说:电子防震就
    是一个信号的储存--释放过程,首先 CD 要先把信号进行提前读取,也就是我们
    见到机子的加速,再把信号储存在 RAM 中,而我们在开防震的时候所听到的就
    是经过 RAM 的声音,这样就是它的过程。当没有防震时是由于信号是 1 比 1 读
    取的,所以当受到冲击后,就会出现跳音。而当开了防震时,机子受到冲击后,
    由 RAM 释放出来的声音使音乐不停地播放,而与此同时,光头迅速进行复位检
    索,当检索到信号后立即补充,所以不会出现跳音。大概的情况就是这样。但是
    这样还没有满足用家的要求,由于这种的方法带来的时间短,通常只有 3 秒,所
    以跳音的机会还是蛮高,如果增大 RAM 又带来造价的增高因为 RAM 这东西价
    格较贵,尤其是质量好的。

老师您好,本人在用STM32F103学习串口通信过程中,发现其用到了NVIC,而我在51单片机是没有遇到的。想了解一下,如果不加NVIC会有什么具体的影响?以及NVIC对串口通信有什么具体的意义呢?串口通信是否一定需要NVIC?
2021-3-4 14:15:40 1 评论

举报

1 条评论
  • 2021-3-4 14:27

    NVIC是单片机内部的中断管理系统,也就是说这个串口通信中使用的是中断的方式,有可能是发送中断,也有可能是接收中断,当然串口通信并不一定要使用中断。只要能实现你想要的功能,方法不局限。

请问一下各位老师,关于SD卡 SPI模式写入单个block 卡返回数据响应成功错误的问题
我采用SPI模式下500KHZ,卡是HC卡8GB,读取block,擦除block都没问题,写入单个block时,CMD24指令响应成功,主机接着发送512byte,但是卡没有返回0x05成功响应,返回一些奇怪的数值,如图,请问这个是怎么回事呢,谢谢啦










2021-3-4 14:20:17 1 评论

举报

1 条评论
  • 2021-3-10 10:42

    你好,可以检查写多个数据时,数据时序是否正确,写时间是否溢出,另外再关注一下SPI的时钟相位,时钟极性,以及时钟高地电平时间是否和SD卡时序要求相符合。

老师好,我在使用STM32F429的过程中有偶发性的出现这样的问题,就是在重启的时候会死机,无论是按RESET按键,还是程序软重启或者是断电重启都会出现这个问题,不是每次必现,偶尔会出现,出现之后必须重新烧写程序才会回复正常,不太清楚死机是因为程序没启动还是因为程序跑飞了。我的BOOT0和BOOT1都是0.广大网友有没有遇到过这种问题,能有什么解决方法呢?
2021-3-9 15:41:21 1 评论

举报

1 条评论
  • 2021-3-10 10:31

    这个有可能是硬件问题,也有可能是软件问题,你需要检查你的硬件以及软件,从两方面下手去检查。可以在一块没有问题的硬件平台上测试程序,使用排除法,排除问题。

三位老师好,我是一个单片机新手, 请教关于STM32F407使用过程中遇到的一个问题。

STM32F407通过USB HS 加外置PHY为USB3300,往U盘中写数据,直接上电运行没法向U盘内写数据,硬件仿真(keil mdk)环境下,发现是Appli_state没法进入到APPLICAtiON_READY(用cube mx生成的程序,用过的应该都知道)只能到state。之后偶尔有一次,硬件仿真环境下手动单步执行了几次while(1)循环,然后点了全速运行,竟然能进到ready了!!!求问怎么回事?

5.png
2021-3-9 15:43:40 1 评论

举报

1 条评论
  • 2021-3-10 10:46

    你好,你上述提到了Appli_state无法进入,那么就需要继续找为什么无法进入,是哪一部分的执行结果影响到这个状态了,一级一级往前溯源,这样就可以找到问题的根源了。

老师好,我想问下AVR的单片机,MCU下载了bootloader后,一是怎么样通过编写一个C程序后通过串口去下载程序?二是有什么方便的工具可以给我有bootloader的avr芯片下载程序。其中第一个网上怎么都搜不到例子。
2021-3-18 01:06:47 1 评论

举报

1 条评论
  • 2021-3-20 22:03

    你好,跟你说一个思路,第一个程序通过串口接收第二个程序的数据,可以边接收边存储,等到全部接收完之后,跳到第二个程序代码开头的地方执行。通信协议可以自定义

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
快速回复 返回顶部 返回列表