1.keil的奇怪问题
创建的数组分配内存到0x10000000地址的时候,数据总是莫名其妙的出现问题,取消勾选就正常了
stm32f407内部有一个CCM内存,这部分内存只能由内核控制,任何外设都不能够进行访问。这样问题就来了,如果使用keil5进行编程时勾选了这个选项(下图),则编译的时候会随机将数据放到CCM中。而Lwip通讯靠的是以太网的专用DMA,如果在编译的时候,lwip的描述符被分配到CCM中,那就会导致ping不同的现象。
2.STM32的CAN ID滤波器的设置
列表模式和掩码模式的两个设置,以及多滤波器的设置方法
static void CanBSP_STM32_Can1_CfgFilter()
{
CAN_FilterTypeDef sFilterConfig;
CAN_FilterTypeDef sFilterConfig1;
sFilterConfig.FilterBank = 0; //过滤器0
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST; //设为列表模式
sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT;
sFilterConfig.FilterIdHigh = ((uint32_t)0x181)<<5; //基本ID放入到STID中
sFilterConfig.FilterIdLow = ((uint32_t)0x182) <<5;
sFilterConfig.FilterMaskIdHigh =((uint32_t)0x183)<<5;
sFilterConfig.FilterMaskIdLow =((uint32_t)0x184)<<5;
//接收到的报文放入到FIFO0中
sFilterConfig.FilterFIFOAssignment = CAN1FIFO;
sFilterConfig