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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版