栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言开发常见错误-持续更新

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言开发常见错误-持续更新

1 字节合并时候出现问题 目的想合并i8T1和i8T2两个温度值

假设i8T1=-5 //0xFB

i8T2=1 //0x01

u16x=i8T1;

u16x <<=8; //0xFB00

u16x |=i8T2 //

理想值 u16x=0xFB01 ,实际值 u16x=0xFF01

因为u16x |=i8T2 运算中 i8T2 被转换为0xFF01 再| u16x 0xFB00时候所以就变为0xFF01

正确应该写为u16x |=((uint16_t )i8T2&0x00FF) //

2 设备初始化得时候一定记得将局部变量得结构体清0,不然多次调用后肯定会出现配置错误。

void HeatPWMconfigTimer16(void)
{
    HeatPWMGpioconfig();
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
    memset(&timer_ocintpara,0,sizeof(timer_oc_parameter_struct));
    memset(&timer_initpara,0,sizeof(timer_parameter_struct));
    rcu_periph_clock_enable(RCU_TIMER16);

    timer_deinit(TIMER16);

   
    timer_initpara.prescaler         = 47;
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = PWM_MAX_DUTY-1;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER16,&timer_initpara);

   
    timer_ocintpara.ocpolarity  = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.outputstate = TIMER_CCX_ENABLE;

    timer_channel_output_config(TIMER16, TIMER_CH_0, &timer_ocintpara);
    timer_channel_output_pulse_value_config(TIMER16, TIMER_CH_0, 1);
    timer_channel_output_mode_config(TIMER16, TIMER_CH_0, TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER16, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
    timer_primary_output_config(TIMER16,ENABLE);
   
    timer_auto_reload_shadow_enable(TIMER16);
   
    timer_enable(TIMER16);
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号