精华内容
下载资源
问答
  • 主要介绍了python开发之IDEL(Python GUI)的使用方法,结合图文形式较为详细的分析总结了Python GUI的具体使用方法,需要的朋友可以参考下
  • 下面小编就为大家带来一篇Python的IDEL增加清屏功能实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • IDEL配置 0、概述 在配置STM32G070RBT6进行串口通信功能时,如果尝试开启空闲中断进行不定长数据接收时,串口一旦接收到数据,就会一直卡在串口中断,无法进行其他操作。配置空闲中断的方法是按照F系列的HAL库配置...

    STM32G070串口DMA&IDEL配置

    0、概述

    在配置STM32G070RBT6进行串口通信功能时,如果尝试开启空闲中断进行不定长数据接收时,串口一旦接收到数据,就会一直卡在串口中断,无法进行其他操作。配置空闲中断的方法是按照F系列的HAL库配置方法,本次使用的HAL版本是STM32Cube_FW_G0_V1.5.0。
    

    1、解决方法

    在查阅资料后,发现F4系列高版本的HAL库串口中断处理方法中,如果开启了串口空闲中断,中断回调函数里没有专门针对空闲中断处理的函数。按照HAL库给的方法,通过DMA接收数据并判断是否有空闲中断事件发生。其中,HAL库的中断函数代码参考如下:
    
    void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
    {
      uint32_t isrflags   = READ_REG(huart->Instance->ISR);
      uint32_t cr1its     = READ_REG(huart->Instance->CR1);
      uint32_t cr3its     = READ_REG(huart->Instance->CR3);
    
    
      uint32_t errorflags;
      uint32_t errorcode;
    
    ···············省略一部分···············
    /* Check current reception Mode :
         If Reception till IDLE event has been selected : */
    //检查是否产生空闲中断事件
      if ((huart->ReceptionType == HAL_UART_RECEPTION_TOIDLE)
          && ((isrflags & USART_ISR_IDLE) != 0U)
          && ((cr1its & USART_ISR_IDLE) != 0U))
      {
            //清除空闲中断标志位
        __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_IDLEF);
    
    
        /* Check if DMA mode is enabled in UART */
        //检查是否使用了串口DMA接收中断
        if (HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR))
        {
          /* DMA mode enabled */
          /* Check received length : If all expected data are received, do nothing,
             (DMA cplt callback will be called).
             Otherwise, if at least one data has already been received, IDLE event is to be notified to user */
          uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx);
          if ((nb_remaining_rx_data > 0U)
              && (nb_remaining_rx_data < huart->RxXferSize))
          {
            /* Reception is not complete */
            huart->RxXferCount = nb_remaining_rx_data;
    
    
            /* In Normal mode, end DMA xfer and HAL UART Rx process*/
            if (HAL_IS_BIT_CLR(huart->hdmarx->Instance->CCR, DMA_CCR_CIRC))
            {
              /* Disable PE and ERR (Frame error, noise error, overrun error) interrupts */
              ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_PEIE);
              ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
    
    
              /* Disable the DMA transfer for the receiver request by resetting the DMAR bit
                 in the UART CR3 register */
              ATOMIC_CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
    
    
              /* At end of Rx process, restore huart->RxState to Ready */
              huart->RxState = HAL_UART_STATE_READY;
              huart->ReceptionType = HAL_UART_RECEPTION_STANDARD;
    
    
              ATOMIC_CLEAR_BIT(huart->Instance->CR1, USART_CR1_IDLEIE);
    
    
              /* Last bytes received, so no need as the abort is immediate */
              (void)HAL_DMA_Abort(huart->hdmarx);
            }
    #if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
            /*Call registered Rx Event callback*/
            huart->RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
    #else
            /*Call legacy weak Rx Event callback*/
            //即使串口DMA没有接收完,产生空闲中断时,也会触发HAL_UARTEx_RxEventCallback回调函数
            HAL_UARTEx_RxEventCallback(huart, (huart->RxXferSize - huart->RxXferCount));
    #endif /* (USE_HAL_UART_REGISTER_CALLBACKS) */
          }
          return;
        }
    ···············省略一部分···············
    

    以上代码可以看出,新版本的HAL库将DMA接收中断和IDEL空闲中断结合起来用于接收不定长数据,当产生空闲中断时,HAL_UART_IRQHandler函数会检查是否使能了DMA接收中断:

    Check received length : If all expected data are received, do nothing,
    (DMA cplt callback will be called).
    Otherwise, if at least one data has already been received, IDLE event is to be notified to user
    

    从上面的解释可以看出,如果产生了空闲中断,检查DMA设定的数据长度是否接收满了,如果数据长度满了则会产生DMA中断,如果还没有接收满,但是已经有至少一字节数据被接收了,则会通过RxEventCallback回调函数通知用户来处理数据。

    2、实验验证

    2.1 STM32CubeMX配置
    –>时钟配置:特别注意一定要对串口的时钟单独配置
    在这里插入图片描述

    –>串口DMA配置:Normal模式,其他默认即可
    在这里插入图片描述

    2.2 主要部分代码展示
    main函数部分

      MX_GPIO_Init();
      MX_DMA_Init();
      MX_USART2_UART_Init();
      /* USER CODE BEGIN 2 */
    
    
      HAL_UARTEx_ReceiveToIdle_DMA(&huart2, RxBuf, RxBuf_SIZE);
      //_HAL_DMA_DISABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
      //__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
     //__HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);//不在主函数里使能空闲中断,程序也正常运行,建议不用添加
      /* USER CODE END 2 */
    

    红色部分为使能串口接收中断和DMA&&空闲中断,HAL_UARTEx_ReceiveToIdle_DMA函数参数为串口句柄、数据缓存数组、DMA接收的最大长度
    usart部分代码

    void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
    {
        if (huart->Instance == USART2)
        {
            oldPos = newPos;  // Update the last position before copying new data
    
            /* If the data in large and it is about to exceed the buffer size, we have to route it to the start of the buffer
             * This is to maintain the circular buffer
             * The old data in the main buffer will be overlapped
             */
            if (oldPos+Size > MainBuf_SIZE)  // If the current position + new data size is greater than the main buffer
            {
                uint16_t datatocopy = MainBuf_SIZE-oldPos;  // find out how much space is left in the main buffer
                memcpy ((uint8_t *)MainBuf+oldPos, RxBuf, datatocopy);  // copy data in that remaining space
    
    
                oldPos = 0;  // point to the start of the buffer
                memcpy ((uint8_t *)MainBuf, (uint8_t *)RxBuf+datatocopy, (Size-datatocopy));  // copy the remaining data
                newPos = (Size-datatocopy);  // update the position
            }
    
    
            /* if the current position + new data size is less than the main buffer
             * we will simply copy the data into the buffer and update the position
             */
            else
            {
                memcpy ((uint8_t *)MainBuf+oldPos, RxBuf, Size);
                newPos = Size+oldPos;
            }
            /* start the DMA again */
            Uart2_SendStr((char*)RxBuf);
            HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *) RxBuf, RxBuf_SIZE);
            __HAL_DMA_ENABLE_IT(&hdma_usart2_rx, DMA_IT_HT);
    
    
        }
    
        /****************** PROCESS (Little) THE DATA HERE *********************/
    
        /* Let's say we want to do if IDEL Event happend */
        
    }
    

    以上代码可以自定义内容,按照以上程序内容如果一次向DMA发送的数据超过了RxBuf_SIZE,新数据会把旧数据覆盖掉,但是!!!如果一次发送的数据量很大,memcpy拷贝函数操作时会越界,最好不要一次发送上百字节的较长数据流,或者将数据缓冲数组设置大一些,否则回调函数里数组越界将会有不可测的事情发生。

    3、总结

    还是没有在新版本HAL库中找到能够单独使用IDEL中断函数的用法,以上方法是使用了DMA和IDEL中断进行不定长数据的接收。
    

    4、参考

    • 知乎: https://zhuanlan.zhihu.com/p/400728566
    • 网友博客教程: https://controllerstech.com/uart-dma-with-idle-line-detection/
    展开全文
  • idel快捷键

    2020-12-03 09:26:23
    Ctrl + R 在当前文件进行文本替换 Ctrl + Y 删除光标所在行 或 删除选中的行 Ctrl + D 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 Ctrl + W 递进式选择代码块。可选中光标所在的单词或段落,...

    Ctrl + R 在当前文件进行文本替换
    Ctrl + Y 删除光标所在行 或 删除选中的行
    Ctrl + D 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面
    Ctrl + W 递进式选择代码块。可选中光标所在的单词或段落,连续按会在原有选中的基础上再扩展选中范围
    Ctrl + E 显示最近打开的文件记录列表
    Ctrl + N 根据输入的 类名 查找类文件
    Ctrl + P 方法参数提示显示
    Ctrl + H 显示当前类的层次结构 (所有实现类)
    Ctrl + / 注释光标所在行代码
    Ctrl + 光标定位 按 Ctrl 不要松开,会显示光标所在的类信息摘要
    Alt + Enter 根据光标所在问题,提供快速修复选择,光标放在的位置不同提示的结果也不同
    Alt + Insert 代码自动生成,如生成对象的 set / get 方法,构造函数,toString() 等
    Ctrl + Alt + L 格式化代码,可以对当前文件和整个包目录使用
    Ctrl + Alt + O 优化导入的类,可以对当前文件和整个包目录使用
    Ctrl + Alt + 左方向键 退回到上一个操作的地方
    Ctrl + Alt + 右方向键 前进到上一个操作的地方
    Ctrl + Shift + F 根据输入内容查找整个项目 或 指定目录内文件
    Ctrl + Shift + Z 取消撤销
    Ctrl + Shift + J 自动将下一行合并到当前行末尾
    Shift + F6 重命名
    ctrl+alt+t 在idea中添加try/catch的快捷键
    alt+逗号 alt+/ 提示
    ctrl+alt+B 实现类
    Ctrl +shift+space 变量
    Ctrl + alt +v 补全返回值变量及方法
    alter+7 显示类的所有方法

    ctrl+shift+ 等号,展开所有折叠

    Debug 常用快捷键
    F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果该方法体还有方法,则不会进入该内嵌的方法中
    F8 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则不进入当前方法体内
    F9 在 Debug 模式下,恢复程序运行,但是如果该断点下面代码还有断点则停在下一个断点上
    Alt + F8 在 Debug 的状态下,选中对象,弹出可输入计算表达式调试框,查看该输入内容的调试结果
    Ctrl + F8 在 Debug 模式下,设置光标当前行为断点,如果当前已经是断点则去掉断点
    Shift + F7 在 Debug 模式下,智能步入。断点所在行上有多个方法调用,会弹出进入哪个方法
    Shift + F8 在 Debug 模式下,跳出,表现出来的效果跟 F9 一样 (F9 是进入下一个断点,shift+F8 是跳出当前方法)
    Ctrl + Shift + F8 在 Debug 模式下,指定断点进入条件
    Alt + Shift + F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内,如果方法体还有方法,则会进入该内嵌的方法中,依此循环进入

    展开全文
  • 1.通过下面这个链接下载到... 将这个文本的后缀改为ClearWindow.py 拷贝ClearWindow.py文件,放在Python安装目录Python XXX\Lib\idlelib下面(XXX为你的python版本)。 记事本打开Python XXX\Lib\idlelib目录下的c...

    1.通过下面这个链接下载到自己电脑的本地
    https://bugs.python.org/file14303/ClearWindow.py

    1. 将这个文本的后缀改为ClearWindow.py
    2. 拷贝ClearWindow.py文件,放在Python安装目录Python XXX\Lib\idlelib下面(XXX为你的python版本)。
    3. 记事本打开Python XXX\Lib\idlelib目录下的config-extensions.def(IDLE扩展的配置文件), 为防止出错,你可以在打开它之前先copy一个备份 。
    4. 修改config-extensions.def ,在末尾添加如下内容,然后保存退出:
      在文件末尾加入以下配置:
      [ClearWindow]
      enable=1
      enable_editor=0
      enable_shell=1
      [ClearWindow_cfgBindings]
      clear-window=<Control-Key-l>
      来解释下什么意思
      enable=1
      #1为真 意思就是启用这个扩展
      enable_editor=0
      #编辑器禁用这个扩展
      enable_shell=1
      #IDLE Shell启动扩展
      clear-window=<Control-Key-l>
      #设置快捷键为Ctrl + L
      6.此时我们打开Python IDLE Shell
      点击Options,可以看到我们的扩展被成功加载。
      7.同样,我们可以按下Ctrl + L进行清屏操作。我们还可以通过clear-window=<Control-Key-l>修改快捷键,例如修改为ctrl + 3,则是clear-window=<Control-Key-3>
      python 中设置IDEL快捷键清屏

    转载于:https://blog.51cto.com/11651211/2312941

    展开全文
  • 在Python-IDEL上进行测验
  • *****重要*******转载请注明出处***********1.空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发...

    *****重要*******转载请注明出处***********

    1.空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发空闲中断的(会触发break中断)。

    2.关于第二点有要铺垫的三个情况,datasheet中

    "当一空闲帧被检测到时,其处理步骤和接收到普通数据帧一样,但如果IDLEIE位被设置将产生一个中断"

    "空闲符号被视为完全由'1'组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位'1'的位数也包括了停止位的位数”

    空闲符号的配图后面跟这一个低电平.

    有人理解为只有收到下一个数据的起始位才会触发中断,这样理解是不对的,应该是数据后有空闲了一帧就会触发.

    3.清中断的方式感觉奇怪,使用函数USART_ClearITPendingBit(

    USART1, USART_IT_IDLE

    )清除不了中断的.我用的是3.5的库,查看函数说明,里面的@param参数并没有IDLE,后面的@note中,这样说:

    "PE(Parity

    error),FE(Framing error),NE(Noise error),ORE(OverRun error) and

    IDLE(Idle line detected) pending bits are cleared by software

    sequence: a read operation to USART_SR register

    (USART_GetITStatus()) followed by a read operation to USART_DR

    register (USART_ReceiveData())."

    我是通过语句"USART1->DR;"来清除IDLE中断的.

    现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下:

    方法1:实现思路:采用STM32F103的串口1,并配置成空闲中断IDLE模式且使能DMA接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成之后,当外部给单片机发送数据的时候,假设这帧数据长度是200个字节,那么在单片机接收到一个字节的时候并不会产生串口中断,而是DMA在后台把数据默默地搬运到你指定的缓冲区里面。当整帧数据发送完毕之后串口才会产生一次中断,此时可以利用DMA_GetCurrDataCounter();函数计算出本次的数据接受长度,从而进行数据处理。

    应用对象:适用于各种串口相关的通信协议,如:MODBUS,PPI

    ;还有类似于GPS数据接收解析,串口WIFI的数据接收等,都是很好的应用对象。

    方法2:实现思路:直接利用stm32的RXNE和IDLE中断进行接收不定字节数据。

    展开全文
  • 最开始,我在命令框里输入pip install requests是显示已安装的,但是在python的IDEL中输入import requests显示No module named requests错误,经过百度一般是说存在多个版本的python,我的解决过程是: (windows,...
  • uart_dma_idel.zip

    2020-05-11 17:32:35
    使用GD32F450ZGT6 usart0和 DMA1CH2完成空闲中断加DMA接收不定长数据 参考链接:...
  • python IDEL 清屏

    2020-06-14 22:38:01
    在Option 中增加clear shell window选项 1)将下述文件保存为ClearWindow.py, 并放置在C:\\Users\\LIN\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\idlelib'下 查看路径的方法,import sys, print(sys....
  • 参考网址
  • 但在我按照要求配置好三个虚拟机后,出现退出无法再次正常开启虚拟机,只能正常打开master,但对于slave1跟slave2会出现黑屏卡死并且无法关闭,并报“虚拟机无法连接虚拟设备idel 0:1”的错误。 解决过程 参考的解决...
  • Config IDEL... ' , 67 ' Code Context ' ] 68 # 菜单Windows中的选项 69 MENU_WINDOWS_ITEMS = [ ' Zoom Height Alt+2 ' ] 70 # 菜单Help中的选项 71 MENU_HELP_ITEMS = [ ' About IDEL ' ...
  • python IDEL 快捷键

    2020-04-15 17:21:22
    ctrl + ] 多行向右缩进 ctrl + [ 多行向左缩进 alt +P 显示上一句 alt+N 显示下一句
  • 使用springMVC+mybatis-plus技术结合maven多模块管理,idel编辑器集成一系列功能 如:邮件发送,敏感词替换,微信接入接口工具类 WeiXinUtils,接口签名加密验证,sitemesh3页面装饰,redis 缓存,execl导出,定时器...
  • 求助,Python安装了Anaconda之后python自带的IDEL无法引用第三方库 本来一直是使用idel的,之前安装了一些第三方库现在也可以使用, 但是在安装了anaconda之后,自动安装了很多常用库,就是下面这些 但是这些只能在...
  • 第三步:配置idel     按 ctrl+alt+shift+/ 选择 Registry       图中圈住的都勾选上,然后重启项目,修改java文件后,你会发现不需要在手动重启就可以了   转载于:...
  • 常用快捷键及在IDEL中的应用altctrlwin键Ctrl+alt alt alt 关闭窗口 Alt + Enter 在IntelliJ IDEA中,根据光标所在问题,提供快速修复选择,光标放在的位置不同提示的结果也不同 选中代码块上下移动 Alt +...
  • 如何在IDEL中搭建一个VUE项目

    千次阅读 2018-03-22 14:26:53
    大前提:安装node.js和npm打开命令提示符(win+R——cmd) 1. 切换到你想要新建项目的文件夹中下 2. 运行 npm i -g vue-cli 安装Vue-cli脚手架 3. 运行 vue init webpack demo(项目名) 4. cd demo 切换到项目...
  • 右击桌面的helloworld.py,出现edit with IDEL,然后选64bit的(因为我这个是64位的),之后出现如下的画面: 然后按F5或者在run里选择run module F5,会出现如下画面: 方法4:在cmd里执行
  • 在这篇blog"Python开发_python的安装"里面你会了解到python的安装。 安装后,我们希望能够运用python GUI来运行一些我们编写的程序,那么Python GUI怎样用呢? 看完这篇blog,也许你就会使用Python GUI来编写你...
  • 求大佬指导一下!!,谢谢了!! 之前都是正常的,前段时间不知道怎么突然出现这种情况 重新开了一个项目用Hello Word测试同样是这样: sdk没有问题: 但是可以使用命令行的方式编译和运行: ...
  • 在依次安装python3.6——pip——pygame后,发现在IDLE中import pygame会报错,如下所示又是一番查找错误。尝试网友提到的,32位pygame不兼容64位...所以,存疑,到底是什么原因导致我的IDEL不能顺利调用pygame???...
  • Ⅰ安装jrebel插件1.&nbsp;Ctrl+Alt+S打开设置,搜索jrebel插件&nbsp;2.&nbsp;安装jrebel插件&nbsp;&nbsp;3.&nbsp;...Ⅱ下载破解软件及破解教程注:本教程引用ilanyu大神...
  • 好久不打开我的IDEA——IDEA(Python 3.5 64-bit) 再次打开出现了如下错误这个错误](https://img-blog.csdnimg.cn/2020030800013885.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_...
  • idel部署的问题

    2018-06-26 15:28:51
    war和war exploded的区别转载地址:https://blog.csdn.net/xlgen157387/article/details/56498938在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况:是选择war还是war exploded 这里首先看一下他们...
  • sbt eclipse idel

    2016-11-21 16:43:53
    https://github.com/mpeltonen/sbt-idea addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.0.1") addSbtPlugin("com.github.mpeltonen"...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,860
精华内容 2,344
关键字:

idel

友情链接: 45bb4299.zip