小白问题:用stm32cubemx生成代码后,需要自己写或者移植一个自己的库吗

新手交流admin 回复了问题 • 2 人关注 • 1 个回复 • 8 次浏览 • 9 小时前 • 来自相关话题

STM32F4 定时器中断 发送和接受

问题困惑admin 回复了问题 • 2 人关注 • 2 个回复 • 32 次浏览 • 1 天前 • 来自相关话题

分享:利用stm32cube的Hal库以四线方式操作LCD1602的方法和操作示例

软件教程红烧鱼 回复了问题 • 7 人关注 • 9 个回复 • 2233 次浏览 • 2 天前 • 来自相关话题

准备开发一个无刷驱动板,但是不会用CUBE,求教大仙指导一下

问题困惑admin 回复了问题 • 2 人关注 • 1 个回复 • 51 次浏览 • 3 天前 • 来自相关话题

求助 串口通信问题

问题困惑admin 回复了问题 • 2 人关注 • 1 个回复 • 41 次浏览 • 4 天前 • 来自相关话题

Aardio学习笔记4

其他分享admin 发表了文章 • 11 个评论 • 43 次浏览 • 4 天前 • 来自相关话题

还是分析Gcode代码用的,先前是直接循环获取一行的数据然后解析显示到listbox中,现在需要点击任意一行然后进行解析测试,如果没有选中任意一行那么就继续循环解析:listbox中有这么个函数:win.ui.ctrl.listbox() = 列表框\n!listbox.
!listbox.cls = 设计时类名
!listbox.className = 运行时类名
!listbox.clear() = 清除列表框所有内容
!listbox.delete() = 删除当前选中项
!listbox.delete(__) = 删除指定项
!listbox.getItemText(__/*项索引*/) = 获取指定项文本
!listbox.getItemRect(__/*项索引*/) = 获取指定项区块位置\n返回::RECT() 结构体
!listbox.getAt(x,y) = 返回指定客户区坐标所在的项索引.
!listbox.add(__/*请输入文本*/) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,-1) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,1) = 添加列表项到头部
!listbox.selIndex = 获取或设置列表框当前选中项\n仅在单选模式下有效,多选模式下请使用 getSelected() setSelected() 函数
!listbox.selText = 获取当前选项的文本\n或根据指定的文本查找并改变选项对于这些理解的不是很深,所以需要一步步实践下:姑且会用到mainForm.listbox.selIndex, mainForm.listbox.selText于是在界面中增加一个按钮,用来显示哪个被点选了...console.log(mainForm.listbox.selIndex,mainForm.listbox.selText);实现上面的完整代码如下:import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=561;bottom=654)
mainForm.add(
Motion_file={cls="listbox";left=373;top=10;right=552;bottom=530;edge=1;items={};z=2};
button={cls="button";text="加载";left=16;top=542;right=173;bottom=591;z=3};
button2={cls="button";text="转换";left=197;top=541;right=551;bottom=590;z=4};
button3={cls="button";text="获取谁被点选了";left=20;top=598;right=177;bottom=647;z=5};
listbox={cls="listbox";left=11;top=9;right=361;bottom=529;edge=1;items={};vscroll=1;z=1}
)
/*}}*/

import console;
console.open()
mainForm.button3.oncommand = function(id,event){
//mainForm.msgbox( mainForm.button3.text );

console.log(mainForm.listbox.selIndex,mainForm.listbox.selText);
}


mainForm.button.oncommand = function(id,event){
//mainForm.msgbox( mainForm.button.text );
var filecontent = string.load("\res\5047.nc");
    var linestr = string.split(filecontent,'<\r\n>')
    for(i=1;#linestr;1){   
        //增加编码转换,这样就不会显示乱码了
        mainForm.listbox.add(string.fromto(linestr[i],0,65001));
    }

}


G_conv = function(str){
    var delspace = string.replace(str," ","");
    var letter = string.split(delspace);
    var num = "";
    for(i=1;#letter;1){
        //如果字符为空字符则不作处理继续循环
        if(letter[i] == " "){
            continue ;
        }
        //强制转换为数字格式,不是数字则返回null,是则返回数字
        var k,v = tonumber(letter[i]);
        //判断是数字,或者是负号,或者是小数点?
        if( (k != null) || (letter[i] == "-")|| (letter[i] == ".")){
            //连接这些数字
            num = num ++ letter[i];
            //如果字符串末尾是数字,则直接输出数字
            if(i == #letter){
                //console.log(num)
                mainForm.Motion_file.add(num);
                num ="";
            }
        }else {    //不是数字,直接输出
            if(num != ""){
                mainForm.Motion_file.add(num);
                num = "";
            }
            //console.log(num)
            mainForm.Motion_file.add(letter[i]);
            //console.log(letter[i])
        }
  
    }
  
     
     
}
var iItem =1;
mainForm.button2.oncommand = function(id,event){
var lineCurnum ;
mainForm.Motion_file.clear();
G_conv(mainForm.listbox.getItemText(iItem));
iItem++;
if(iItem>mainForm.listbox.count){
iItem = 1;
}

}


mainForm.listbox.wndproc = function(hwnd,message,wParam,lParam){
    select(message) {
        case 0x233/*_WM_DROPFILES*/ {
            mainForm.listbox.clear();
            var path = win.getDropFile(wParam)[1];
            var filecontent = string.load(path);
            var linestr = string.split(filecontent,'<\r\n>')
            for(i=1;#linestr;1){   
                //增加编码转换,这样就不会显示乱码了
                mainForm.listbox.add(string.fromto(linestr[i],0,65001));
            }
             
        }
        else {
        }
    }
     
}


mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage(); 查看全部

还是分析Gcode代码用的,先前是直接循环获取一行的数据然后解析显示到listbox中,现在需要点击任意一行然后进行解析测试,如果没有选中任意一行那么就继续循环解析:

listbox中有这么个函数:

win.ui.ctrl.listbox() = 列表框\n!listbox.
!listbox.cls = 设计时类名
!listbox.className = 运行时类名
!listbox.clear() = 清除列表框所有内容
!listbox.delete() = 删除当前选中项
!listbox.delete(__) = 删除指定项
!listbox.getItemText(__/*项索引*/) = 获取指定项文本
!listbox.getItemRect(__/*项索引*/) = 获取指定项区块位置\n返回::RECT() 结构体
!listbox.getAt(x,y) = 返回指定客户区坐标所在的项索引.
!listbox.add(__/*请输入文本*/) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,-1) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,1) = 添加列表项到头部
!listbox.selIndex = 获取或设置列表框当前选中项\n仅在单选模式下有效,多选模式下请使用 getSelected() setSelected() 函数
!listbox.selText = 获取当前选项的文本\n或根据指定的文本查找并改变选项

对于这些理解的不是很深,所以需要一步步实践下:

姑且会用到

mainForm.listbox.selIndex, mainForm.listbox.selText

于是在界面中增加一个按钮,用来显示哪个被点选了...

console.log(mainForm.listbox.selIndex,mainForm.listbox.selText);

blob.png

实现上面的完整代码如下:

import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio form";right=561;bottom=654)
mainForm.add(
Motion_file={cls="listbox";left=373;top=10;right=552;bottom=530;edge=1;items={};z=2};
button={cls="button";text="加载";left=16;top=542;right=173;bottom=591;z=3};
button2={cls="button";text="转换";left=197;top=541;right=551;bottom=590;z=4};
button3={cls="button";text="获取谁被点选了";left=20;top=598;right=177;bottom=647;z=5};
listbox={cls="listbox";left=11;top=9;right=361;bottom=529;edge=1;items={};vscroll=1;z=1}
)
/*}}*/

import console;
console.open()
mainForm.button3.oncommand = function(id,event){
//mainForm.msgbox( mainForm.button3.text );

console.log(mainForm.listbox.selIndex,mainForm.listbox.selText);
}


mainForm.button.oncommand = function(id,event){
//mainForm.msgbox( mainForm.button.text );
var filecontent = string.load("\res\5047.nc");
    var linestr = string.split(filecontent,'<\r\n>')
    for(i=1;#linestr;1){   
        //增加编码转换,这样就不会显示乱码了
        mainForm.listbox.add(string.fromto(linestr[i],0,65001));
    }

}


G_conv = function(str){
    var delspace = string.replace(str," ","");
    var letter = string.split(delspace);
    var num = "";
    for(i=1;#letter;1){
        //如果字符为空字符则不作处理继续循环
        if(letter[i] == " "){
            continue ;
        }
        //强制转换为数字格式,不是数字则返回null,是则返回数字
        var k,v = tonumber(letter[i]);
        //判断是数字,或者是负号,或者是小数点?
        if( (k != null) || (letter[i] == "-")|| (letter[i] == ".")){
            //连接这些数字
            num = num ++ letter[i];
            //如果字符串末尾是数字,则直接输出数字
            if(i == #letter){
                //console.log(num)
                mainForm.Motion_file.add(num);
                num ="";
            }
        }else {    //不是数字,直接输出
            if(num != ""){
                mainForm.Motion_file.add(num);
                num = "";
            }
            //console.log(num)
            mainForm.Motion_file.add(letter[i]);
            //console.log(letter[i])
        }
  
    }
  
     
     
}
var iItem =1;
mainForm.button2.oncommand = function(id,event){
var lineCurnum ;
mainForm.Motion_file.clear();
G_conv(mainForm.listbox.getItemText(iItem));
iItem++;
if(iItem>mainForm.listbox.count){
iItem = 1;
}

}


mainForm.listbox.wndproc = function(hwnd,message,wParam,lParam){
    select(message) {
        case 0x233/*_WM_DROPFILES*/ {
            mainForm.listbox.clear();
            var path = win.getDropFile(wParam)[1];
            var filecontent = string.load(path);
            var linestr = string.split(filecontent,'<\r\n>')
            for(i=1;#linestr;1){   
                //增加编码转换,这样就不会显示乱码了
                mainForm.listbox.add(string.fromto(linestr[i],0,65001));
            }
             
        }
        else {
        }
    }
     
}


mainForm.enableDpiScaling();
mainForm.show();

return win.loopMessage();


STM32CUBEMX自动配置导致错误

问题困惑徐康 回复了问题 • 5 人关注 • 8 个回复 • 612 次浏览 • 5 天前 • 来自相关话题

USB 虚拟串口cjons通信

经验分享q18378401409 发表了文章 • 0 个评论 • 27 次浏览 • 5 天前 • 来自相关话题

有两个地方要注意的第一,需要把栈空间改大,我用0x01000第二判断USB接收接收是接收个数小于64。

有两个地方要注意的

第一,需要把栈空间改大,我用0x01000

第二判断USB接收接收是接收个数小于64。

在贴内的代码中,注释常常为乱码,请教下这个要怎么解决?

新手交流维泽凌峰 回复了问题 • 4 人关注 • 3 个回复 • 49 次浏览 • 6 天前 • 来自相关话题

在低波特率下使用RS-485总线的一个小技巧

经验分享jialian4213 回复了问题 • 2 人关注 • 2 个回复 • 291 次浏览 • 2017-07-14 18:48 • 来自相关话题