8254|3

1667

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

GD32F芯片问题及解决分享 [复制链接]

GD32F在有关初始化里,用库函数初始化分频系数,周期的 xxxx_init函数内,存在软件更新事件的代码,如果你不清除标志位,直接使能定时器中断,那么就会先进中断一次。导致有个别定时功能意外的激发。
再做LED点阵屏扫码程序时,发现对于08接口的单色屏扫16行大概,1ms就要扫1行,把扫屏串行数据函数放在1ms定时器中断里,就会发现这个定时器会占用特别多CPU时间,串口中断即便在19200波特率下,总是会丢失字节(发生字节超时错误),原因在于定时器优先级高,且定时器内做的事情差不多需要0.5ms,将串口中断优先级提升到可以抢占定时器中断,才不会发生串口字节丢失。虽然主频已经是跑36MHZ了,串口中断接收1个字节,应该在1us内就可以中断处理完毕。
void TIMER14_IRQHandler(void)
{
        timer_disable(TIMER14);
        timer_interrupt_flag_clear(TIMER14, TIMER_INT_UP);  
        timer_counter_value_config(TIMER14, 0);
        show_256x16_oneline(Sysinfo.scan_line);
        if(16 == ++Sysinfo.scan_line)   Sysinfo.scan_line = 0; //从第1行 扫到16行 再回到1行 舟而复始 索引0 是因为数组存储
        timer_enable(TIMER14);
}
3.keil5.2x采用新一代complier 6编译器,可以快速提升编译速度,但对于代码优化会跟c5不同,从而导致运行跟预先不符合。   void delay_us(unsigned char ctr)
{
    unsigned char nb;
   volatile unsigned char nop=1;
    for(; ctr>0; ctr--)
    {   
                for(nb=0; nb<US_UPPER; nb++)   //#elif  defined  (RISC_36MHZ)    #define  US_UPPER  5
                nop++;
    }
}
c6编译器 如果不对nop进行io修饰,全速运行下,这个for循环会比想的快很多(不能通过指令执行时间*估算一共需要执行多少次来==软延迟效果),而c5编译下,即便不用volatile 修饰,运行的效果 软延时时间会接近你 每条指令时间*大致的指令数。
4. 相信大家用的较多的应用往往包含USART,在大部分应用中,确保串口中断的优先级,在中断方式接收数据的时候,一定要快速读取接收到字节。否则容易出现字节超时错误OV,从代码健壮性和易于恢复来说,接收中断子程序里还是要对这个进行处理(判断标志位 清接收标志 读下接收寄存器)。一定要开1个定时器做字节超时保护,用于串口数据包异常下的自我恢复能力。

此帖出自GD32 MCU论坛

最新回复

感谢分享~~~   详情 回复 发表于 2021-5-8 20:22
点赞 关注
 

回复
举报

7452

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 

不要用nop++,用自带的NOP宏空操作

此帖出自GD32 MCU论坛

点评

是的,也是可以的  详情 回复 发表于 2021-5-8 13:37
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

1667

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
freebsder 发表于 2021-5-8 09:31 不要用nop++,用自带的NOP宏空操作

是的,也是可以的

此帖出自GD32 MCU论坛
 
 
 

回复

1412

帖子

3

TA的资源

版主

4
 

感谢分享~~~

此帖出自GD32 MCU论坛
 
个人签名

没有什么不可以,我就是我,不一样的烟火! 

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表