上面有的初始化函数没有
时间: 2023-07-30 19:09:20 浏览: 38
是的,我漏掉了一些初始化函数。以下是完整的程序,包括了所有的初始化函数:
```c
#include "stm32f10x.h"
#include "usb_lib.h"
#include "usb_desc.h"
#include "usb_pwr.h"
#define USB_RX_BUFFER_SIZE 64 // USB接收缓冲区大小
#define SCAN_BUFFER_SIZE 20 // 扫码枪数据缓冲区大小
u8 USB_Rx_Buffer[USB_RX_BUFFER_SIZE]; // USB接收缓冲区
u8 Scan_Buffer[SCAN_BUFFER_SIZE]; // 扫码枪数据缓冲区
u8 Scan_Index = 0; // 扫码枪数据缓冲区索引
void RCC_Configuration(void) // RCC配置
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
}
void GPIO_Configuration(void) // GPIO配置
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void NVIC_Configuration(void) // NVIC配置
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USB_Cable_Config(FunctionalState NewState) // USB电缆连接配置
{
if (NewState != DISABLE) {
GPIO_ResetBits(GPIOA, GPIO_Pin_12);
} else {
GPIO_SetBits(GPIOA, GPIO_Pin_12);
}
}
void USB_Configuration(void) // USB配置
{
Set_USBClock();
USB_Interrupts_Config();
USB_Init();
}
void USB_SendData(u8* data, u16 len) // USB发送数据
{
u16 i;
for (i = 0; i < len; i++) {
while (EP1_IN_Callback(EP1_IN, data[i]) != 0);
}
}
void USB_ReceiveData(u8* data, u16 len) // USB接收数据
{
u16 i;
for (i = 0; i < len; i++) {
while (EP3_OUT_Callback(EP3_OUT) != 0);
data[i] = USB_Rx_Buffer[i];
}
}
void Scan_Process(u8* data, u16 len) // 扫码枪数据处理
{
u16 i;
for (i = 0; i < len; i++) {
if (data[i] == '\r') { // 扫码枪发送的数据以\r结尾
Scan_Buffer[Scan_Index] = '\0'; // 扫码枪数据缓冲区末尾加上\0,表示字符串结束
USB_SendData(Scan_Buffer, Scan_Index);
Scan_Index = 0;
} else {
Scan_Buffer[Scan_Index++] = data[i];
if (Scan_Index >= SCAN_BUFFER_SIZE) { // 扫码枪数据超出缓冲区大小,清空缓冲区
Scan_Index = 0;
}
}
}
}
int main(void)
{
RCC_Configuration();
GPIO_Configuration();
USB_Cable_Config(ENABLE);
USB_Configuration();
NVIC_Configuration();
while (1) {
USB_ReceiveData(USB_Rx_Buffer, USB_RX_BUFFER_SIZE);
Scan_Process(USB_Rx_Buffer, USB_RX_BUFFER_SIZE);
}
}
void USB_LP_CAN1_RX0_IRQHandler(void) // USB中断处理函数
{
USB_Istr();
}
```
在这个程序中,我们添加了RCC、GPIO和NVIC的初始化函数,并在主函数中进行了调用。