你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103C8 访问USB寄存器错误

[复制链接]
pccldr 提问时间:2019-2-21 10:22 /
第一次用这个MCU,工程是根据 freeRTOS 10.1 里面的例程修改过来,然后插入USB初始化代码。
但是不知道为什么,只要一访问USB寄存器空间(0x5000 0000 - 0x5003 FFFF USB OTG FS),就会进入HardFault_Handler中断。
Keil 里面调试也是访问不到 这块的寄存器,请各位大神帮忙,看看是哪里初始化没做好?

kk.png


  1. <blockquote>int main(void)
复制代码


收藏 评论3 发布时间:2019-2-21 10:22

举报

3个回答
pccldr 回答时间:2019-2-21 10:24:39
  1. int main(void)
  2. {
  3.         BoardLowInit();
  4.         GpioInit();
  5.         Uart1Init();
  6.         USBD_INIT(); for (;;);
  7. }

  8. void BoardLowInit( void )
  9. {
  10.   /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
  11.   /* Set HSION bit */
  12.   RCC->CR |= (uint32_t)0x00000001;

  13.   RCC->CFGR &= (uint32_t)0xF0FF0000;
  14.   
  15.   /* Reset HSEON, CSSON and PLLON bits */
  16.   RCC->CR &= (uint32_t)0xFEF6FFFF;

  17.   /* Reset HSEBYP bit */
  18.   RCC->CR &= (uint32_t)0xFFFBFFFF;

  19.   /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;

  21.   /* Disable all interrupts and clear pending bits  */
  22.   RCC->CIR = 0x009F0000;
  23.   SCB->ExceptionTableOffset = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
  24.        
  25.         ClockInit();
  26. }

  27. void ClockInit (void)
  28. {
  29.         /* Start with the clocks in their expected state. */
  30.         RCC_DeInit();
  31.         SystemCoreClock = HSI_VALUE;
  32.         ulwSystemTickms = 0;
  33.         ulwSystemTickus = 0;

  34.         /* Enable HSE (high speed external clock). */
  35.         RCC_HSEConfig( RCC_HSE_ON );

  36.         /* Wait till HSE is ready. */
  37.         while( RCC_GetFlagStatus( RCC_FLAG_HSERDY ) == RESET )
  38.         {
  39.         }

  40.         /* 2 wait states required on the flash. */
  41.         *( ( unsigned long * ) FLASH_BASE ) = 0x02;

  42.         /* HCLK = SYSCLK */
  43.         RCC_HCLKConfig( RCC_SYSCLK_Div1 );

  44.         /* PCLK2 = HCLK */
  45.         RCC_PCLK2Config( RCC_HCLK_Div1 );

  46.         /* PCLK1 = HCLK/2 */
  47.         RCC_PCLK1Config( RCC_HCLK_Div2 );

  48.         /* PLLCLK = 8MHz * 9 = 72 MHz. */
  49.         RCC_PLLConfig( RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );

  50.         /* Enable PLL. */
  51.         RCC_PLLCmd( ENABLE );

  52.         /* Wait till PLL is ready. */
  53.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  54.         {
  55.         }

  56.         /* Select PLL as system clock source. */
  57.         RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK );

  58.         /* Wait till PLL is used as system clock source. */
  59.         while( RCC_GetSYSCLKSource() != 0x08 )
  60.         {
  61.         }

  62.         /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE and AFIO clocks */
  63.         RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC
  64.                                                         | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE );

  65.         /* SPI2 Periph clock enable */
  66.         RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2, ENABLE );

  67.         /* Set the Vector Table base address at 0x08000000 */
  68.         NVIC_SetVectorTable( NVIC_VectTab_FLASH, 0x0 );

  69.         NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );

  70.         /* Configure HCLK clock as SysTick clock source. */
  71.         SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK );
  72.         RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
  73.         RCC_ADCCLKConfig(RCC_PCLK2_Div2);
  74.         SystemCoreClock = 72000000;
  75. //        RCC_APB1PeriphClockCmd( RCC_APB1Periph_ALL, ENABLE );
  76. //        RCC_APB2PeriphClockCmd( RCC_APB2Periph_ALL, ENABLE );
  77. }

  78. void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
  79. {
  80.   GPIO_InitTypeDef GPIO_InitStructure;
  81.   
  82.   /* Configure SOF VBUS ID DM DP Pins */
  83.   GPIO_InitStructure.GPIO_Pin =
  84.                                 GPIO_Pin_11 |
  85.                                 GPIO_Pin_12;
  86.   
  87.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  88.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  89.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  90.         RCC_APB1PeriphClockCmd( RCC_APB1Periph_USB, ENABLE );
  91. }
复制代码
七哥 回答时间:2019-2-21 11:38:41
是硬件调试,还是软件模拟调试的?
STM32F103C8没有USB OTG,F105、F107才有OTG

0x5000 0000 - 0x5003 FFFF地址是USB OTG FS
F103只有0x4000 5C00 - 0x4000 5FFF USB device FS registers
20190221113657.png


20190221113724.png


20190221113819.png



评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

pccldr 回答时间:2019-2-21 13:07:10
哦,原来如此,这个是 OTG的空间,那我换device初始化代码试试。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版