1.使用LCD屏幕时,只用st-link时,亮度很暗,需要用usb数据线额外给屏幕供电;
2.移植freertos到f103c8t6芯片时,工程没有错误,但单片机没有反应;
需要将堆的大小改成10*1024;
3.在找已经移植好的freertos的f103工程时,找到的不是f103c8系列;这里以f103c6系列为例,总会出现Error:Flash Download failed-“Cortex-M3的报错;
4.裸机stm32下,移植江协科技的OLED库,正常使用;移植freertos后,没有创建任务只有OLED_ShowString
()这个函数无法使用,只要带有这个函数,oled屏幕黑屏。
解决方案:利用OLED_ShowChar()函数,自己实现了一个OLED_ShowString
。
5.在给f103遥控器编码器设置队列发送接收时失败:
(1)在中断中发送消息,发送使用xQueueSendFromISR,接收使用xQueueReceiveFromISR;
(2)编码器接口配置成外部中断,NVIC抢占优先级一定要高于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY == 5;
这里stm32的优先级是数字越小,优先级越高;rtos的是数字越大,优先级越高;
要想在中断中使用队列、信号量时,优先级一定要低于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY。这里的优先级比较是以stm32的优先级为准,比如configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY为5,我要在中断中使用队列,那么这个中断的抢占优先级要小于等于5,即NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;这个值大于等于5即可;
注意:
解决方法:查看正点原子的手册时,中断测试实验中,这里的宏定义为5。
定时器3的抢占优先级为4,高于5,说明优先级等级使用的是stm32的标准。
还有一点,不知道管理rtos与stm32优先级中界的宏定义是configMAX_SYSCALL_INTERRUPT_PRIORITY还是configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY(感觉是这个)
以下是deepseek给出的解答: configMAX_SYSCALL_INTERRUPT_PRIORITY是映射到寄存器后的实际值。
6.f1遥控器项目:一开始已经对KEY_Init进行初始化;
其中 KEY_Init函数如下所示:
按键B14和B15为普通按键;按键B8和B9为外部中断,通过编码器控制;
void KEY_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line8 | EXTI_Line9;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStructure);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_Init(&NVIC_InitStructure);
}
但在后续中的ShowMenu_task任务里还要再次调用KEY_Init,按键B8和B9才能正常运行;而没有调用KEY_Init时,B14和B15为普通按键可以使用。
未解决!!!