记录stm32g431kbt6 编写SPI以及USB HID通信

文章讲述了在STM32单片机上遇到的USBHID通信、SPI读写及LCD显示之间的冲突问题。作者尝试通过禁用USB中断并在SPI操作后恢复来解决,但未成功。后来发现是栈区大小不足导致的代码溢出问题,增大栈区后问题得到解决。此外,还讨论了LCD初始化、延时函数实现、运算放大器烧毁以及电源管理等方面的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里需要考虑多个任务的问题,类似PC上的操作系统,stm32单片机可以用调度器。重要的就是用一个定时器产生中断来作为时标,一个时标完成一个任务,任务运行时间不宜超过时标间隔,且避免同时进行多个任务。长时间的任务可以通过DMA来实现。22.

22. 8.15 (还没放暑假 (|| ~ , ~|| ) 

现在主要就是USB HID通信与SPI写读以及LCD的问题,这几个之间有冲突,一边写/读SPI,一边响应USB,会造成stm32不知道进入哪里死循环,哎。上位机有时候可以识别USB,有时候PC直接无法识别。(有一个bug,就是USB插入后,我有一个初始值为0的变量会改变,很奇怪?)

现在想在进行SPI写和读的时候将USB的中断全部禁止,SPI写完后在使能USB中断,但貌似不行,还是有错误。打算用定时器TIM1来做个时标,然后根据这个时标分配任务。

CubeMX配置定时器1中断,update interrupte 与break interrupt 的区别???

 void TIM3_IRQHandler(void)   首先进入中断函数
 HAL_TIM_IRQHandler(&htim2);之后进入定时器中断处理函数
判断产生的是哪一类定时器中断(溢出中断/PWM中断.....) 和定时器通道
 void HAL_TIM_PeriodElapsedCallback(&htim2);    进入相对应中断回调函数
在中断回调函数中添加用户代码。

设计代码架构,用时标的方法。

问题:添加定时器TIM1中断,USB HID连不上了。

可能是USB中断与定时器中断有冲突导致。

在默认的模板工程里,一般使用如下的方式实现延迟函数。

参考 STM32 USB无法连接电脑_cyang812的博客-CSDN博客https://blog.csdn.net/u011303443/article/details/78735808


__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}

__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0U;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay)
  {
  }
}

而在 USB 项目中,需要使用如下的方式实现延时函数。

void HAL_Delay(__IO uint32_t Delay)
{
  while(Delay) 
  {
    if (SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) 
    {
     

引用中的代码是USB插入后主机进行枚举并复位USB的处理过程。在这段代码中,if语句检查是否发生了复位中断,如果发生了复位中断,则会进行一系列操作,包括清除复位标志、调用复位回调函数和设置地址为0。 引用中的代码是在USBD_CDC_Init函数中动态分配内存给pdev->pClassData。 引用中的代码是HAL_PCD_MspInit函数的定义部分,其中会根据pcdHandle->Instance的值进行相应的处理。 根据提供的引用信息,HAL_PCD_IRQHandler(&hpcd_USB_FS)是用于处理USB FS(全速)的中断请求的函数调用。具体的实现细节需要查看HAL库的文档和源代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [STM32 USB复合设备编写](https://blog.csdn.net/aifuxun2845/article/details/102026435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [记录stm32g431kbt6 编写SPI以及USB HID通信](https://blog.csdn.net/s_jk6652/article/details/126348126)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值