OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5922|回复: 2

改IAP后HAL_Delay开始计数的时间晚了是为什么?求大神指点

[复制链接]

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2020-3-12
在线时间
24 小时
发表于 2023-1-12 09:47:11 | 显示全部楼层 |阅读模式
1金钱
事情是这样的,单片机用的F767ZGT6,一开始我没用IAP,单纯CUBE中开启了freeRTOS,并且Timebase Source选择了TIM1。初始化过程如下,运行的没有问题。但是改了IAP以后程序卡在HAL_Delay里,在定时器中断中加串口打印发现应该是定时器一直没有开启导致计数,应该MX_FREERTOS_Init()执行完以后才开启的定时器, 搜索代码TIM1也没看到在哪里初始化的。我把HAL_Delay全部屏蔽以后其余的程序运行是正常的。问题1: 为什么IAP会导致Timebase 的TIM1中断延后开启?
问题2: TIM1的初始化和开中断的过程在哪执行的?
问题3:原子哥例程中的delay_init也是操作的Timebase Source吗?在CUBE中使用freeRTOS时还能不能复制原子哥例程中的delay_init来作为延时用?
请指教,非常感谢各位的回答。

未加IAP时初始化代码:

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4. //SCB->VTOR = FLASH_BASE | 0x18000;//IAP设置偏移量,IAP时打开
  5.        
  6.     SCB_EnableICache();//使能I-Cache
  7.     SCB_EnableDCache();//使能D-Cache   
  8.         SCB->CACR|=1<<2;   //强制D-Cache透写,如不开启,实际使用中可能遇到各种问题       
  9.   /* USER CODE END 1 */

  10.   /* MCU Configuration--------------------------------------------------------*/

  11.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  12.   HAL_Init();

  13.   /* USER CODE BEGIN Init */
  14.        
  15.   /* USER CODE END Init */

  16.   /* Configure the system clock */
  17.   SystemClock_Config();

  18.   /* USER CODE BEGIN SysInit */
  19.   /* USER CODE END SysInit */

  20.   /* Initialize all configured peripherals */
  21.   MX_GPIO_Init();
  22.   MX_ADC1_Init();
  23.   MX_ADC3_Init();
  24.   MX_SPI1_Init();
  25.   MX_SPI5_Init();
  26.   MX_CAN1_Init();
  27.   MX_CAN2_Init();
  28.   MX_CAN3_Init();
  29.   MX_SPI2_Init();
  30.   MX_SPI3_Init();
  31.   MX_SPI4_Init();
  32.   MX_SPI6_Init();
  33.   MX_UART4_Init();
  34.   MX_UART7_Init();
  35.   MX_TIM6_Init();
  36.   MX_TIM3_Init();
  37.   /* USER CODE BEGIN 2 */
  38.   //INTX_ENABLE();
  39.   printf("app初始化1完成\r\n");
  40.         HAL_GPIO_WritePin(SPI_RST_5500_GPIO_Port,SPI_RST_5500_Pin,GPIO_PIN_RESET);
  41.         HAL_Delay(500);
  42.         HAL_GPIO_WritePin(SPI_RST_5500_GPIO_Port,SPI_RST_5500_Pin,GPIO_PIN_SET);
  43.         HAL_Delay(500);
  44.         w5500user_init();
  45.         user_init();
  46.         api_init();
  47.         HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);//开启中断
  48.         HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO1_MSG_PENDING);//开启中断
  49.         HAL_CAN_ActivateNotification(&hcan3, CAN_IT_RX_FIFO1_MSG_PENDING);//开启中断
  50.         HAL_CAN_Start(&hcan1);
  51.         HAL_CAN_Start(&hcan2);
  52.         HAL_CAN_Start(&hcan3);
  53.         HAL_GPIO_WritePin(GPIOF, LED1_Pin, GPIO_PIN_RESET);
  54.         HAL_Delay(1000);//延时1s,观察是否复位
  55.        
  56.         HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
  57.         printf("app初始化2\r\n");
  58.   /* USER CODE END 2 */

  59.   /* Call init function for freertos objects (in freertos.c) */
  60.   MX_FREERTOS_Init();
  61.   /* Start scheduler */
  62.   osKernelStart();

  63.   /* We should never get here as control is now taken by the scheduler */
  64.   /* Infinite loop */
  65.   /* USER CODE BEGIN WHILE */
  66.   printf("app初始化3\r\n");
  67.   while (1)
  68.   {
  69.     /* USER CODE END WHILE */

  70.     /* USER CODE BEGIN 3 */
  71.   }
  72.   /* USER CODE END 3 */
  73. }
复制代码



最佳答案

查看完整内容[请看2#楼]

关于问题3:实测了下,发现用IAP的时候,用原子哥例程中的delay_init,以及把HAL_Delay替换成delay_ms后运行看上去都是正常的。 但是,把IAP去掉后发现程序死掉了,死在了delay_ms中。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2020-3-12
在线时间
24 小时
 楼主| 发表于 2023-1-12 09:47:12 | 显示全部楼层
关于问题3:实测了下,发现用IAP的时候,用原子哥例程中的delay_init,以及把HAL_Delay替换成delay_ms后运行看上去都是正常的。
但是,把IAP去掉后发现程序死掉了,死在了delay_ms中。。。
回复

使用道具 举报

15

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
117
金钱
117
注册时间
2020-3-12
在线时间
24 小时
 楼主| 发表于 2023-1-12 10:11:21 | 显示全部楼层
关于问题2,找到开启的地方了,实在初始化函数最开始的HAL_Init里有个HAL_InitTick(TICK_INT_PRIORITY);
可见已经开启定时器了啊,怎么就不执行呢,关键后面初始化完FreeRTOS后就正常了
我尝试在后面添加原子哥例程中的INTX_ENABLE(),结果直接进入硬件故障了。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 20:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表