硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2425|回复: 9
收起左侧

關於 bsp_InitDWT 函數

[复制链接]

34

主题

112

回帖

214

积分

高级会员

积分
214
发表于 2018-10-31 14:40:35 | 显示全部楼层 |阅读模式
各位好:

困了2天,還是不恥的發問了。

利用CubeMX 創一個 乾淨專案並從RTX教程中學會移植RTX ,創任務寫入利用 一般I/O 延遲拉高拉低,都很正常

擷取.JPG

當加入bsp_InitDWT (使用安富萊的bsp_dwt.c)後 使用 bsp_DelayMS();
擷取1.JPG
        while(1)
        {
                HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_10);
                bsp_DelayMS(10);
        }


會進入 HardFault_Handler,這還沒建立RTX任務,應該跟RTX無關吧?

我非常疑惑...懇請前輩指教,謝謝

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117545
QQ
发表于 2018-11-1 02:22:33 | 显示全部楼层
正常情况下,不应该啊,

这个函数也没有什么特别的地方,回头我在H7上试试HAL库,看看HAL库有没有什么特别的地方。
回复

使用道具 举报

34

主题

112

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2018-11-1 13:30:51 | 显示全部楼层
感謝回復,附上 專案檔
RTX-Blank.rar (14.59 MB, 下载次数: 21)

再麻煩版主測試了


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117545
QQ
发表于 2018-11-5 01:29:30 | 显示全部楼层
帮你在我们V6板子上面测试,例子没问题,仅注意的到main函数里面的第一个while(1)及其相关函数

1.png
回复

使用道具 举报

34

主题

112

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2018-11-5 12:47:39 | 显示全部楼层
版主  你好
我也是用你們的V6版測試
當你 測試        bsp_DelayMS(50); 時,不會進入HardFault_Handler嗎?這樣就很恐怖了...

int main(void)
{
  /* MCU Configuration----------------------------------------------------------*/

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

  /* Configure the system clock */
  SystemClock_Config();
       
        SystemCoreClockUpdate();       

        bsp_InitDWT();      
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
       
        bsp_DelayMS(50);        /*  下一步會進入HardFault_Handler,不知道為什麼? */

               
        os_sys_init_user (AppTaskStart,            
                          4,                       
                          &AppTaskStartStk,         
                          sizeof(AppTaskStartStk));
        while(1);
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117545
QQ
发表于 2018-11-6 01:33:31 | 显示全部楼层
fcdxsdxsza 发表于 2018-11-5 12:47
版主  你好
我也是用你們的V6版測試
當你 測試        bsp_DelayMS(50); 時,不會進入HardFault_Handler嗎?這樣 ...

你的例子是基于429IGT6,而且外部晶振是25MHz配置的。

我们的V6板子是429BIT6的,外部晶振8MHz。
回复

使用道具 举报

34

主题

112

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2018-11-6 20:10:47 | 显示全部楼层
本帖最后由 fcdxsdxsza 于 2018-11-6 22:06 编辑

版主好:
使用CubeMX配置與V6版一樣  429BIT6的,外部晶振8MHz。
並將專案檔寫入V6版 一樣進HardFault_Handler
附上專案檔 V6-F429 TEST.rar (14.62 MB, 下载次数: 55)

另外  我把armfly的V6-414_RTX 的
429BIT6            改成  429IG
外部晶振8MHz   改成  25MHz

燒入我的429IG板子  是可以執行的!

===============我是分隔線==============================
補充說明,我發現 V6 的 system_stm32f4xx.c  有個   SetSysClock();
我把它放置我的專案檔 並配置好 PLL_M , PLL_N , PLL_Q , PLL_P
再把  HAL_Init();  跟  SystemClock_Config();  註解起來

就可以像V6版一樣了,正常使用了

但原因為何? 可能要請版主看看了
謝謝。



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117545
QQ
发表于 2018-11-7 01:56:19 | 显示全部楼层
这个是你程序设计的bug,有一个稍稍严重的问题,你似乎没有注意到。
函数HAL_Init();已经开启了滴答定时器中断,而你的中断函数执行的RTX的中断服务程序,这个bug就严重了。

而你调用了函数延迟50ms,恰恰就导致1ms时间到了,直接进入到RTX的滴答滴答中断里面去了。


回复

使用道具 举报

34

主题

112

回帖

214

积分

高级会员

积分
214
 楼主| 发表于 2018-11-7 21:06:06 | 显示全部楼层
了解!  謝謝你
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117545
QQ
发表于 2018-11-8 02:29:09 | 显示全部楼层



后面还有什么问题,继续交流。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 00:24 , Processed in 0.046450 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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