houcs 发表于 2022-8-5 21:54

烧录到板子上,就不能认到设备了

cube产生的usb虚拟串口代码,烧录到f4的板子后,可以认到设备,实现数据收发。由于其他应用程序需要用到usb虚拟串口的功能,就直接加到了cube产生的usb虚拟串口的代码上,烧录到板子上,就不能认到设备了

chuxh 发表于 2022-8-5 21:56

原先产生的代码没动过吗?

xxrs 发表于 2022-8-5 21:57

将应用程序移到usb虚拟串口的代码后,注释掉了main函数中其他代码

chuxh 发表于 2022-8-5 21:59

只留下usb的初始化函数

houcs 发表于 2022-8-5 22:02

其实就跟cube产生的usb虚拟串口代码一样了,还是认不到设备。

houcs 发表于 2022-8-5 22:04


dengdc 发表于 2022-8-5 22:09

如果你都屏蔽掉所有其它了,你重新插拔下试试。

houcs 发表于 2022-8-5 22:14

当应用程序移到usb虚拟串口后,不注释main函数,进行调试,出现如下结果。

houcs 发表于 2022-8-5 22:17


houcs 发表于 2022-8-5 22:19


houcs 发表于 2022-8-5 22:21

试了啊,插拔没用。

zhanghqi 发表于 2022-8-5 22:23

仔细深入看看代码
ST提供的例程一般只适合验证特定功能,喜欢把时钟、IO初始化、重定向等代码都放倒功能模块里,一整合往往就抓瞎了

wyjie 发表于 2022-8-5 22:25

做实际产品最好自己理顺功能,参考最开始的库函数例程,也就是时钟、IO初始化等各集中到一块,代码多注释就好了。

llljh 发表于 2022-8-5 22:28

IO初始化框架参考:

#include "includes.h"
#include "TrafficLights_GPIO_Config.h"

//*如果在其它c文件已定义,则去掉本行第一个斜杠,以屏蔽这个函数定义
//STM32F0系列设置GPIO
void SetGPIO(GPIO_TypeDef *Port,
                         u16 pin,
                         GPIOSpeed_TypeDef speed,
                         GPIOMode_TypeDef mode,
                         GPIOOType_TypeDef OType,
                         GPIOPuPd_TypeDef PuPd)
{
      GPIO_InitTypeDefGPIO_InitStructure;
      GPIO_InitStructure.GPIO_Pin = pin;
      GPIO_InitStructure.GPIO_Mode = mode;
      GPIO_InitStructure.GPIO_OType = OType;
      GPIO_InitStructure.GPIO_PuPd = PuPd;
      GPIO_InitStructure.GPIO_Speed = speed;

      GPIO_Init(Port, &GPIO_InitStructure);
}
//*/

const GPIO_Define_Struct TrafficLights_Gpio = {
      {GPIOA,      GPIO_Pin_0 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_PP,      GPIO_PuPd_NOPULL,      HC595_CLK},      //PA0 定义为HC595_CLK
      {GPIOA,      GPIO_Pin_1 ,GPIO_Speed_10MHz,      GPIO_Mode_IN,      GPIO_OType_OD,      GPIO_PuPd_UP,      KEY1},      //PA1 定义为KEY1
      {GPIOA,      GPIO_Pin_2 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_PP,      GPIO_PuPd_NOPULL,      HC595_DATA},      //PA2 定义为HC595_DATA
      {GPIOA,      GPIO_Pin_3 ,GPIO_Speed_10MHz,      GPIO_Mode_IN,      GPIO_OType_OD,      GPIO_PuPd_UP,      HC595_DI},      //PA3 定义为HC595_DI
      {GPIOA,      GPIO_Pin_4 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_PP,      GPIO_PuPd_NOPULL,      HC595_SHIFT},      //PA4 定义为HC595_SHIFT
      {GPIOA,      GPIO_Pin_5 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_OD,      GPIO_PuPd_UP,      KEY_LED3},      //PA5 定义为KEY_LED3
      {GPIOA,      GPIO_Pin_6 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_OD,      GPIO_PuPd_UP,      KEY_LED2},      //PA6 定义为KEY_LED2
      {GPIOA,      GPIO_Pin_7 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_OD,      GPIO_PuPd_UP,      KEY_LED1},      //PA7 定义为KEY_LED1
      {GPIOB,      GPIO_Pin_1 ,GPIO_Speed_10MHz,      GPIO_Mode_OUT,      GPIO_OType_PP,      GPIO_PuPd_NOPULL,      RUN_LED},      //PB1 定义为RUN_LED
      {GPIOA,      GPIO_Pin_9 ,GPIO_Speed_10MHz,      GPIO_Mode_AF,      GPIO_OType_PP,      GPIO_PuPd_NOPULL,      TX1},      //PA9 定义为TX1
      {GPIOA,      GPIO_Pin_10,GPIO_Speed_10MHz,      GPIO_Mode_IN,      GPIO_OType_OD,      GPIO_PuPd_UP,      RX1},      //PA10定义为RX1
};

void TrafficLights_GPIO_Configuration(void)//初始化所用到的GPIO
{
      u8 i,num=TrafficLights_GPIO_Count;
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);      //串口1:TXD
      GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1); //串口1:RXD
      for(i=0;i<num;i++)
      {
                if(TrafficLights_Gpio.no != i)//检查管脚编号是否正确
                {
                //      DebugPrint("错误的管脚编号!");
                        while(1)
                              ;
                }
                else
                {
                        SetGPIO(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin,TrafficLights_Gpio.speed,TrafficLights_Gpio.mode,TrafficLights_Gpio.otype,TrafficLights_Gpio.pupd);
                }
      }
      //添加其它初始化(如重映射、拉高或拉低某些IO等等)……
}

dengdc 发表于 2022-8-5 22:30

c和h都是从excel里提取IO定义,自动生成的

#ifndef __TrafficLights_GPIO_Config_h__
#define __TrafficLights_GPIO_Config_h__

//*如果在其它h文件已定义,则去掉本行第一个斜杠,以屏蔽这个结构体定义
typedef struct
{
      GPIO_TypeDef *Port;
      u16 pin;
      GPIOSpeed_TypeDef speed;
      GPIOMode_TypeDef mode;
      GPIOOType_TypeDef otype;
      GPIOPuPd_TypeDef pupd;
      u8 no;//枚举号
}GPIO_Define_Struct;
//*/

//用点焊机控制板改红绿灯控制板。使用IO模拟SPI口
typedef enum
{
      HC595_CLK=0,      //PA0 定义为HC595_CLK
      KEY1,      //PA1 定义为KEY1
      HC595_DATA,      //PA2 定义为HC595_DATA
      HC595_DI,      //PA3 定义为HC595_DI
      HC595_SHIFT,      //PA4 定义为HC595_SHIFT
      KEY_LED3,      //PA5 定义为KEY_LED3
      KEY_LED2,      //PA6 定义为KEY_LED2
      KEY_LED1,      //PA7 定义为KEY_LED1
      RUN_LED,      //PB1 定义为RUN_LED
      TX1,      //PA9 定义为TX1
      RX1,      //PA10定义为RX1

      TrafficLights_GPIO_Count      //使用的IO总数
}TrafficLights_GPIO_Enum;

extern const GPIO_Define_Struct TrafficLights_Gpio;

#define GPIO_ReadBits      GPIO_ReadInputDataBit
//PA0 定义为HC595_CLK:
#define _SetHC595_CLK          GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrHC595_CLK      GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadHC595_CLK      GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA1 定义为KEY1:
#define _SetKEY1               GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrKEY1             GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadKEY1             GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA2 定义为HC595_DATA:
#define _SetHC595_DATA         GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrHC595_DATA       GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadHC595_DATA       GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA3 定义为HC595_DI:
#define _SetHC595_DI         GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrHC595_DI         GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadHC595_DI         GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA4 定义为HC595_SHIFT:
#define _SetHC595_SHIFT      GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrHC595_SHIFT      GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadHC595_SHIFT      GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA5 定义为KEY_LED3:
#define _SetKEY_LED3         GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrKEY_LED3         GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadKEY_LED3         GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA6 定义为KEY_LED2:
#define _SetKEY_LED2         GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrKEY_LED2         GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadKEY_LED2         GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA7 定义为KEY_LED1:
#define _SetKEY_LED1         GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrKEY_LED1         GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadKEY_LED1         GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PB1 定义为RUN_LED:
//#define _SetRUN_LED            GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//#define _ClrRUN_LED          GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//#define _ReadRUN_LED          GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA9 定义为TX1:
#define _SetTX1                GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrTX1            GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadTX1            GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
//PA10定义为RX1:
#define _SetRX1                GPIO_SetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ClrRX1            GPIO_ResetBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)
#define _ReadRX1            GPIO_ReadBits(TrafficLights_Gpio.Port,TrafficLights_Gpio.pin)

#define _ClrHC595_EN ///定义两个兼容的宏
#define _SetHC595_RST

#define _SetLED_Run                _SetKEY_LED1
#define _ClrLED_Run                _ClrKEY_LED1
#define _ReadLED_Run      _ReadKEY_LED1
#define _Read_LED_Run_Output      GPIO_ReadOutputDataBit(TrafficLights_Gpio.Port,      TrafficLights_Gpio.pin)
#define _Run_LED_ON                _ClrKEY_LED1
#define _Run_LED_OFF      _SetKEY_LED1

#define _SetLED_Step      _SetKEY_LED2
#define _ClrLED_Step      _ClrKEY_LED2
#define _ReadLED_Step      _ReadKEY_LED2
#define _Read_LED_Step_Output      GPIO_ReadOutputDataBit(TrafficLights_Gpio.Port,      TrafficLights_Gpio.pin)
#define _Step_LED_ON      _ClrKEY_LED2
#define _Step_LED_OFF      _SetKEY_LED2

#define _SetLED_Mode      _SetKEY_LED3
#define _ClrLED_Mode      _ClrKEY_LED3
#define _ReadLED_Mode      _ReadKEY_LED3
#define _Read_LED_Mode_Output      GPIO_ReadOutputDataBit(TrafficLights_Gpio.Port,      TrafficLights_Gpio.pin)
#define _Mode_LED_ON      _ClrKEY_LED3
#define _Mode_LED_OFF      _SetKEY_LED3

void SetGPIO(GPIO_TypeDef *Port,
                         u16 pin,
                         GPIOSpeed_TypeDef speed,
                         GPIOMode_TypeDef mode,
                         GPIOOType_TypeDef OType,
                         GPIOPuPd_TypeDef PuPd
                         );
void TrafficLights_GPIO_Configuration(void);//初始化所用到的GPIO

PT_THREAD(Test74HC595Thread(struct pt *pt));//74HC595测试线程

#endif //__TrafficLights_GPIO_Config_h__

songqian17 发表于 2022-8-5 22:32

确实这种可能。就是里面混合了其他配置。不能拿其他工程的代码套用

heweibig 发表于 2022-8-5 22:36

你最好还是在你这个工程上重新配置吧。

yufe 发表于 2022-8-5 22:38

我应该深入的了解一下,

houcs 发表于 2022-8-5 22:40

代码蛮多的

houcs 发表于 2022-8-5 22:42

时钟改了,usb需要48MHz的时钟。移植后的代码,目前是认不到虚拟串口。debug显示Cannot access Memory,汇编代码停在MOVS r0, r0。
页: [1] 2
查看完整版本: 烧录到板子上,就不能认到设备了