• stm32应用、项目、调试


    主要记录实际使用中的一些注意点。

    一应用实例

    1.LCD

    1.LCD1602

    电路图

    看手册:电源和背光可以使用5v或者3.3v,数据和控制引脚直接和单片机引脚连接即可。

    单片机型号:stm32c031c6t6  可以直接使用推完输出连接D0--D7,RS,EN,RW引脚,3.3v就可以驱动(我使用的是这种方式);或者使用开漏输出,外面加上拉电阻5v驱动(没有用,不知道效果)。

    两个间隔时间:

    1.控制时序的延时:这个用的多,时间太短会显示不正常,或者不显示。

    2.发给lcm指令之间的延时:一般初始化的时候回用一下

    1. /*液晶初始化*/
    2. void Lcm1602A_Init(void)
    3. { Lcm1602A_Wr_Command(0x38);
    4. Lcm1602A_Wr_Command(0x38); //2次显示模式设置
    5. Lcm1602A_Wr_Command(0x0c); //显示及光标设置
    6. Lcm1602A_Wr_Command(0x01); //显示清屏
    7. HAL_Delay(2);
    8. Lcm1602A_Wr_Command(0x06); //显示光标移动设置
    9. Lcm1602A_Display_String();
    10. }
    1. /*发送指令给lcd*/
    2. void Lcm1602A_Wr_Command(uint8_t wrcommand)
    3. {
    4. RS_1602A(0);//控制引脚
    5. RW_1602A(0);//控制引脚
    6. Lcm_Delay(LCM_DELAY_TIME);//这个延时很重要
    7. Lcm1602A_Data_Write(wrcommand);//写入数据(指令)
    8. Lcm_Delay(LCM_DELAY_TIME);
    9. E_1602A(1);//使能引脚
    10. Lcm_Delay(LCM_DELAY_TIME);
    11. E_1602A(0);
    12. }

    遇到的问题:减少Lcm_Delay(LCM_DELAY_TIME)时间;导致初始化失败,可是看手册的话,接受一个指令1us就够了,可是实际使用却需要几十us或者更长时间才够,不知道哪里的问题。先不管了。

    Lcm_Delay(LCM_DELAY_TIME)不同时间下:

    初始化效果:

    正常如下


    间隔100us如下

     间隔50us:

    间隔10us如下

    间隔2us如下

    其他状况:

    本来应该是第一行显示0--9 符号  第二行显示字母的,

    不知道是程序被动过了,还是编译环境,还是什么有变化,初始化完成就变成了这样。

    同样的时间下,连续两行显示全部显示不成功,但是一次显示几个字符却可以正常显示,当时调试的时候,就是这原因没注意到初始化没成功。

    处理方式:增长延时的时间,lcd显示不需要很实时。

    原因:同样的Lcm_Delay(LCM_DELAY_TIME) (大概延时10us),

    (外部晶振用的是25mhz)定时器tim3的Prescaler = 47; Period = 1;可以正常初始化

    改成Prescaler = 24; Period = 999; 初始化会出错。

    2.LCD12864

    字体显示:

    横置横排:平时看的从左到右显示的那种

    竖置横排:古代的那种排版

    常用芯片:ST7567

    调试问题:闪烁,电源线虚焊了;    有些闪烁和时间有关,刷新太快,还没有遇到。

    2.rs485、rs232、rs422

    rs485使用:

    max3485:3.3v左右驱动

    max485:5v左右驱动,不过有时候3.3v驱动也可以使用,具体有什么问题或者通过电路规避问题还没有了解过。

    rs485和rs422有相同的地方,485满足422的规范,反过来不行,要注意。

    MAX481/MAX483/MAX485/ MAX487:用于rs485

    MAX488/MAX490/MAX491:用于rs422

    MAX232/MAX3232:用于 rs232

    以上是常见型号,不同公司命名方式不同,

    通讯芯片:rs485芯片使用电路图

    此电路图是简单版本,没有偏置电路(上下拉),防冲击器件,可以使用的,只是少了安全等旁电路。

    资料:

     RS485使用注意事项(上下拉电阻)

    https://www.cnblogs.com/CodeWorkerLiMing/p/14259593.html

    rs485调试遇过的问题:

    单片机引脚TX和RX搞反了,测试max487之前的串口是有数据的,电脑串口助手能够接受到,经过接收不到了。  找原因以为是ab相少了上下拉电阻;电压什么不对,后来确定原因是引脚反了,虽然反了,但是中间偶尔也能收到几个正确的字符,所以开始主要以为是程序有问题。

    如果max输入端没问题,输出端差分引脚ab接反了,电脑串口助手也能收到字符,就像波特率不对,也能收到字符,不过解析出来的是乱码。

    资料:

    关于485通讯芯片MAX487的一个问题

    关于485通讯芯片MAX487的一个问题 - 通信技术 - 21ic电子技术开发论坛

    二,调试问题

    keil在线调试需要点击好几次运行才可以运行,要是直接下载程序直接就不运行。

    解决:target里面的use microlib要勾选,因为使用了printf。

    keil在线调试STM32,点三次运行才能跑到main的问题解决。

    keil在线调试STM32,点三次运行才能跑到main的问题解决。_keil5调试时要点几次运行-CSDN博客

  • 相关阅读:
    哈希表 | 三数之和、四数之和 | 用`双指针法`最合适 | leecode刷题笔记
    推荐系统-排序层-模型:Wide&Deep
    超实用 :大部分的人都不知道的一个Python技巧
    openjudge 1.5.22 津津的储蓄计划
    算法查找——分块查找
    lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(2)
    1.7.1、常见的计算机网络体系结构
    React Native性能优化红宝书
    高德地图API-鼠标点击地图获取经纬度坐标(关键操作)
    golang工程——常用数据结构底层原理【mao、slice、func、string】
  • 原文地址:https://blog.csdn.net/code_snow/article/details/140950673