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);
/* TIMER1 configuration */
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);
/* CH1, CH2 and CH3 configuration in PWM0 mode */
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);
/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER16);
/* auto-reload preload enable */
timer_enable(TIMER16);
}
3 工程包含文件 main.h User_Data.h User_Beep.h
总的数据结构放在user_data.h文件中
typedef struct
{
S_BEEP_DATA sBeepData;
}
S_BEEP_DATA 在User_data.h中定义
问题点:编译器不能识别S_BEEP_DATA结构体
解决:1 User_data.h 中不包含main.h 只包含User_Beep.h
2 User_Beep.c中 包含main.h 不包含User_Beep.h
3 main.h 中包换User_Beep.h User_Data.h
3 Freertos 调用VTaskList 函数 前几次有数据打印,后面无数据打印
原因:VTaskList 函数中每次都会Malloc 0x90个字节的内存,但工程中使用的是heap1.c文件 ,vPortFree()函数为空,内存分配不会释放导致;
解决:选择其它Heap2 3 4.c 的文件,这些文件里分配的内存会释放
4 单片机 堆栈2个堆栈指针MSP PSP
裸机模式:只使用MSP
Freertos: MSP作为系统堆栈(全局变量,中断嵌套);PSP作为任务堆栈(每一个任务都有一个堆栈地址)
5 HardFault_Handler中断错误
6 编译器V5 转到V6 报错
删除项目文件架内报错文件,如Core_cm4.h ,将C++里面的路径添加
如:D:\keil_v5\ARM\PACK\ARM\CMSIS\5.7.0\CMSIS\Core\Include