蜂鸣器音效,加了一坨

This commit is contained in:
ws 2025-03-13 19:23:24 +08:00
parent f483ba9980
commit 4d94d15052
34 changed files with 803 additions and 139 deletions

View File

@ -69,6 +69,14 @@ void Error_Handler(void);
#define LED_G_GPIO_Port GPIOH
#define LED_B_Pin GPIO_PIN_10
#define LED_B_GPIO_Port GPIOH
#define buzzer_Pin GPIO_PIN_14
#define buzzer_GPIO_Port GPIOD
#define down_Pin GPIO_PIN_13
#define down_GPIO_Port GPIOE
#define key_Pin GPIO_PIN_11
#define key_GPIO_Port GPIOE
#define paw_Pin GPIO_PIN_14
#define paw_GPIO_Port GPIOE
#define SPI_CS_Pin GPIO_PIN_12
#define SPI_CS_GPIO_Port GPIOB

View File

@ -34,11 +34,14 @@ extern "C" {
extern TIM_HandleTypeDef htim1;
extern TIM_HandleTypeDef htim4;
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
void MX_TIM1_Init(void);
void MX_TIM4_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

View File

@ -57,6 +57,9 @@ void MX_GPIO_Init(void)
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOH, LED_R_Pin|LED_G_Pin|LED_B_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, down_Pin|key_Pin|paw_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);
@ -79,6 +82,13 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
/*Configure GPIO pins : PEPin PEPin PEPin */
GPIO_InitStruct.Pin = down_Pin|key_Pin|paw_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = SPI_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

View File

@ -101,9 +101,12 @@ int main(void)
MX_USART6_UART_Init();
MX_TIM1_Init();
MX_SPI2_Init();
MX_TIM4_Init();
/* USER CODE BEGIN 2 */
//HAL_TIM_Base_Start(&htim1);
//HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1 );
HAL_TIM_Base_Start(&htim4);
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
/* USER CODE END 2 */
/* Init scheduler */

View File

@ -25,6 +25,7 @@
/* USER CODE END 0 */
TIM_HandleTypeDef htim1;
TIM_HandleTypeDef htim4;
/* TIM1 init function */
void MX_TIM1_Init(void)
@ -85,6 +86,60 @@ void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 2 */
HAL_TIM_MspPostInit(&htim1);
}
/* TIM4 init function */
void MX_TIM4_Init(void)
{
/* USER CODE BEGIN TIM4_Init 0 */
/* USER CODE END TIM4_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
/* USER CODE BEGIN TIM4_Init 1 */
/* USER CODE END TIM4_Init 1 */
htim4.Instance = TIM4;
htim4.Init.Prescaler = 0;
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.Period = 20999;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM4_Init 2 */
/* USER CODE END TIM4_Init 2 */
HAL_TIM_MspPostInit(&htim4);
}
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
@ -102,6 +157,22 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
/* USER CODE END TIM1_MspInit 1 */
}
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspInit 0 */
/* USER CODE END TIM4_MspInit 0 */
/* TIM4 clock enable */
__HAL_RCC_TIM4_CLK_ENABLE();
/* USER CODE BEGIN TIM4_MspInit 1 */
/* USER CODE END TIM4_MspInit 1 */
}
}
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
@ -111,7 +182,6 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE BEGIN TIM1_MspPostInit 0 */
/* USER CODE END TIM1_MspPostInit 0 */
__HAL_RCC_GPIOE_CLK_ENABLE();
/**TIM1 GPIO Configuration
PE9 ------> TIM1_CH1
@ -127,6 +197,27 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE END TIM1_MspPostInit 1 */
}
else if(timHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspPostInit 0 */
/* USER CODE END TIM4_MspPostInit 0 */
__HAL_RCC_GPIOD_CLK_ENABLE();
/**TIM4 GPIO Configuration
PD14 ------> TIM4_CH3
*/
GPIO_InitStruct.Pin = buzzer_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM4;
HAL_GPIO_Init(buzzer_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN TIM4_MspPostInit 1 */
/* USER CODE END TIM4_MspPostInit 1 */
}
}
@ -146,6 +237,22 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
}
}
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
{
if(tim_baseHandle->Instance==TIM4)
{
/* USER CODE BEGIN TIM4_MspDeInit 0 */
/* USER CODE END TIM4_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM4_CLK_DISABLE();
/* USER CODE BEGIN TIM4_MspDeInit 1 */
/* USER CODE END TIM4_MspDeInit 1 */
}
}
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */

View File

@ -3,26 +3,26 @@
{
"name": "mycode1",
"includePath": [
"d:\\Desktop\\mycode -vision\\Core\\Inc",
"d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Inc",
"d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy",
"d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include",
"d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2",
"d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F",
"d:\\Desktop\\mycode -vision\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include",
"d:\\Desktop\\mycode -vision\\Drivers\\CMSIS\\Include",
"d:\\Desktop\\mycode -vision\\User\\bsp",
"d:\\Desktop\\mycode -vision\\User\\device",
"d:\\Desktop\\mycode -vision\\User\\lib",
"d:\\Desktop\\mycode -vision\\User\\module",
"d:\\Desktop\\mycode -vision\\User\\task",
"d:\\Desktop\\mycode-shoot\\shoot\\Core\\Inc",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Inc",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Inc\\Legacy",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\include",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\CMSIS_RTOS_V2",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\RVDS\\ARM_CM4F",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\CMSIS\\Device\\ST\\STM32F4xx\\Include",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\CMSIS\\Include",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\bsp",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\device",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\lib",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\module",
"d:\\Desktop\\mycode-shoot\\shoot\\User\\task",
"D:\\keil\\ARM\\ARMCC\\include",
"D:\\keil\\ARM\\ARMCC\\include\\rw",
"d:\\Desktop\\mycode -vision\\MDK-ARM",
"d:\\Desktop\\mycode -vision\\Core\\Src",
"d:\\Desktop\\mycode -vision\\Drivers\\STM32F4xx_HAL_Driver\\Src",
"d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source",
"d:\\Desktop\\mycode -vision\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang"
"d:\\Desktop\\mycode-shoot\\shoot\\MDK-ARM",
"d:\\Desktop\\mycode-shoot\\shoot\\Core\\Src",
"d:\\Desktop\\mycode-shoot\\shoot\\Drivers\\STM32F4xx_HAL_Driver\\Src",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source",
"d:\\Desktop\\mycode-shoot\\shoot\\Middlewares\\Third_Party\\FreeRTOS\\Source\\portable\\MemMang"
],
"defines": [
"USE_HAL_DRIVER",

View File

@ -16,3 +16,35 @@
[info] Log at : 2025/3/12|23:02:19|GMT+0800
[info] Log at : 2025/3/12|23:23:36|GMT+0800
[info] Log at : 2025/3/13|10:52:41|GMT+0800
[info] Log at : 2025/3/13|11:23:36|GMT+0800
[info] Log at : 2025/3/13|11:29:50|GMT+0800
[info] Log at : 2025/3/13|11:32:26|GMT+0800
[info] Log at : 2025/3/13|11:48:43|GMT+0800
[info] Log at : 2025/3/13|11:49:08|GMT+0800
[info] Log at : 2025/3/13|11:52:00|GMT+0800
[info] Log at : 2025/3/13|11:52:12|GMT+0800
[info] Log at : 2025/3/13|11:52:29|GMT+0800
[info] Log at : 2025/3/13|11:52:40|GMT+0800
[info] Log at : 2025/3/13|13:05:40|GMT+0800
[info] Log at : 2025/3/13|13:05:50|GMT+0800
[info] Log at : 2025/3/13|13:09:23|GMT+0800
[info] Log at : 2025/3/13|13:09:39|GMT+0800
[info] Log at : 2025/3/13|14:46:01|GMT+0800

View File

@ -10,6 +10,12 @@
"can_task.h": "c",
"go_m8010_6_driver.h": "c",
"read_spi.h": "c",
"djimotor.h": "c"
"djimotor.h": "c",
"buzzer.h": "c",
"main.h": "c",
"ball.h": "c",
"shoot.h": "c",
"dji.h": "c",
"calc_lib.h": "c"
}
}

View File

@ -1,13 +1,3 @@
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'D:\keil\ARM\ARMCC\Bin'
Build target 'mycode1'
compiling dji_task.c...
compiling dji.c...
compiling djiMotor.c...
compiling shoot_task.c...
compiling can_task.c...
compiling odrive_shoot.c...
linking...
Program Size: Code=26064 RO-data=1860 RW-data=284 ZI-data=22276
FromELF: creating hex file...
"mycode1\mycode1.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed: 00:00:04
Load "mycode1\\mycode1.axf"
Erase Done.Programming Done.Verify OK.Application running ...
Flash Load finished at 19:18:06

View File

@ -1 +1 @@
2025/3/12 20:09:49
2025/3/13 19:18:07

View File

@ -153,62 +153,57 @@
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>go</ItemText>
<ItemText>cmd_fromnuc</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>Temp_buffer</ItemText>
<ItemText>nucbuf</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>cmd_fromnuc</ItemText>
<ItemText>motor_3508_data,0x0A</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>nucbuf</ItemText>
<ItemText>speed,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>motor_3508_data,0x0A</ItemText>
<ItemText>RC_mess,0x0A</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>speed,0x0A</ItemText>
<ItemText>M3508_speed_PID</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>RC_mess</ItemText>
<ItemText>M3508_angle_PID</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>M3508_speed_PID</ItemText>
<ItemText>angle,0x0A</ItemText>
</Ww>
<Ww>
<count>8</count>
<WinNumber>1</WinNumber>
<ItemText>M3508_angle_PID</ItemText>
<ItemText>m,0x0A</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>angle,0x0A</ItemText>
<ItemText>go</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>m,0x0A</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>go</ItemText>
<ItemText>basketball,0x0A</ItemText>
</Ww>
</WatchWindow1>
<WatchWindow2>
@ -1048,6 +1043,42 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\buzzer.c</PathWithFileName>
<FilenameWithoutPath>buzzer.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\ball.c</PathWithFileName>
<FilenameWithoutPath>ball.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\module\shoot.c</PathWithFileName>
<FilenameWithoutPath>shoot.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -1058,7 +1089,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1070,7 +1101,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1082,7 +1113,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1094,7 +1125,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1106,7 +1137,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1118,7 +1149,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1130,7 +1161,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1142,7 +1173,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1154,7 +1185,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1164,6 +1195,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\task\ball_task.c</PathWithFileName>
<FilenameWithoutPath>ball_task.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>

View File

@ -820,6 +820,21 @@
<FileType>1</FileType>
<FilePath>..\User\module\odrive_shoot.c</FilePath>
</File>
<File>
<FileName>buzzer.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\buzzer.c</FilePath>
</File>
<File>
<FileName>ball.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\ball.c</FilePath>
</File>
<File>
<FileName>shoot.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\module\shoot.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -870,6 +885,11 @@
<FileType>1</FileType>
<FilePath>..\User\task\rc_task.c</FilePath>
</File>
<File>
<FileName>ball_task.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\task\ball_task.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -1,3 +1,8 @@
# shoot
# myshoot
r1上层
## r1上层
1. **odrive**推射 **can1** **id 010** **spi2**读取as5047p
2. go1 RS485模块 01翻转 02云台
3. 爪子 左三PC6
4. 接球 左一左2 PI7 PI6

View File

@ -136,8 +136,6 @@ device_status_e odrive_pos_cmd(node_id_e node_id, fp32 pos);
*/
odrive_msg_t* Get_Odrive_Point(void);
void odrive_CB(void);
void User_Odrive_Can1_CB(void);
void User_Odrive_Can2_CB(void);

88
User/module/ball.c Normal file
View File

@ -0,0 +1,88 @@
#include "ball.h"
#include "main.h"
#include "cmsis_os.h"
#include "FreeRTOS.h"
#include "bsp_delay.h"
#define ballcome 1
#define balldown 0
//光电识别
int ball_in(void)
{
if (HAL_GPIO_ReadPin(ball_up_GPIO_Port, ball_up_Pin) == GPIO_PIN_SET)
{
return ballcome;
}
else
{
return balldown;
}
}
int pass_ball(void)
{
if (HAL_GPIO_ReadPin(ball_in1_GPIO_Port, ball_in1_Pin) == GPIO_PIN_SET)
{
return ballcome;
}
else
{
return balldown;
}
}
//运球
void handling_ball(int hand, int paw)
{
paw =ball_in();
if (hand == 1 && paw == 1)
{
//爪子
delay_us(100);
HAL_GPIO_WritePin(paw_GPIO_Port, paw_Pin, GPIO_PIN_RESET);
osDelay(2);
delay_us(100);
//上推
HAL_GPIO_WritePin(down_GPIO_Port, down_Pin, GPIO_PIN_RESET);
hand=0;
}
else
{
//爪子
HAL_GPIO_WritePin(paw_GPIO_Port, paw_Pin, GPIO_PIN_SET);
osDelay(2);
delay_us(100);
//下推
HAL_GPIO_WritePin(down_GPIO_Port, down_Pin, GPIO_PIN_SET);
}
}
//接球
int catch_ball(int inball)
{
inball =pass_ball();
if(inball==1)
{
return ballcome;
}
else
{
return balldown;
}
}

19
User/module/ball.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef _BALL_H_
#define _BALL_H_
typedef struct ball
{
int hand;//运球
int paw;//爪
int inball;//光电门
int to_shoot;//给发射
}BASKETBALL;
int ball_in(void);
int pass_ball(void);
void handling_ball(int hand, int paw);
int catch_ball(int inball);
#endif

79
User/module/buzzer.c Normal file
View File

@ -0,0 +1,79 @@
#include "buzzer.h"
uint32_t Frequency = 0;
uint32_t CLOCK = 10500000;
int i;
int pwm = MIN_BUZZER_PWM;
int psc = 0;
unsigned int notes[] = {
G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3s,A3s,G3,
G3,C4,D4s,D4,C4,D4s,C4,D4,C4,G3,F3s,F3,
F3,G3s,B3,D4, F3,G3s,B3,C4,
C4,D4s,A4s,G4s,G4,A4s,G4s,G4s,G4,G4,B3,C4,
C5,C5,B4,A4s, A4s,D5,C5,G4s,G4,
G4,A4s,G4,F4, F4,G4s,G4,F4,G4
};
unsigned int duration[] = {
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 5, 1, 1, 1, 4,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5,
1, 1, 1, 3, 1, 2, 1, 1, 4,
1, 1, 1, 3, 1, 2, 1, 1, 4
};
void buzzer_on(uint16_t note) {
Frequency = CLOCK / note; // 计算定时器的重载值
htim4.Init.Prescaler = 0; // 预分频器设置为0
htim4.Init.Period = Frequency; // 设置定时器的重载值
// 设置PWM的占空比为50%
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2);
// 启动PWM
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
}
void noTone(void){
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, 0);
HAL_Delay(30);
}
void playSong(void){
for (i = 0; i < sizeof(notes)/sizeof(notes[0]); i++) {
Frequency = CLOCK / notes[i]; // 计算定时器的重载值
htim4.Instance->ARR = Frequency; // 设置定时器的重载值
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_3, Frequency / 2);// 设置PWM的占空比为50%
HAL_Delay(400*duration[i]);
noTone();
}
}
void set_buzzer_frequency(uint32_t freq){
__HAL_TIM_SetAutoreload(&htim4, freq);
__HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, freq/2);
}
uint32_t music[3][205]={{9, 10, 9, 6, 9, 0, 6, 10, 9, 10, 12, 10, 9, 10, 9, 6, 8, 0, 10, 9, 12, 10}, {5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 9, 10, 9, 8, 9, 5, 9, 8, 3, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 9, 10, 0, 10, 12, 13, 14, 13, 12, 10, 9, 9, 8, 9, 9, 9, 8, 0, 8, 10, 12, 13, 12, 0, 8, 9, 9, 8, 10, 0, 9, 10, 12, 13, 15, 16, 17, 16, 15, 12, 13, 15, 17, 17, 17, 16, 0, 12, 13, 15, 17, 17, 17, 16, 0}};
uint32_t lst[3][205]={{ 1, 1, 1, 1, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 1, 1, 2}, {2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 3, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 1, 1, 1, 6, 6, 3, 1, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 4, 1, 1, 2, 2, 2, 2, 2, 8}};
uint32_t tones[]={21000000, 262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1046, 1174, 1318, 1396, 1568, 1760, 1976};
uint32_t lenth[]={22, 103};
uint32_t frequency = 21000000;
uint32_t nw = 0, time_base = 125;
uint32_t song = 1;
void see_you_again(void)
{
set_buzzer_frequency(frequency/tones[music[song][nw]]);
/* USER CODE BEGIN 3 */
HAL_Delay(time_base*lst[song][nw]-time_base*1/4);
set_buzzer_frequency(frequency/tones[0]);
HAL_Delay(time_base*1/64);
nw = (nw + 1) % lenth[song];
}

53
User/module/buzzer.h Normal file
View File

@ -0,0 +1,53 @@
#ifndef _BUZZER_H_
#define _BUZZER_H_
#include "tim.h"
#define MIN_BUZZER_PWM ((uint32_t)10000)
#define MAX_BUZZER_PWM ((uint32_t)20000)
#define MAX_PSC ((uint32_t)1000)
#define C3 131
#define C3s 139
#define D3 147
#define D3s 156
#define E3 165
#define F3 175
#define F3s 185
#define G3 196
#define G3s 208
#define A3 220
#define A3s 233
#define B3 247
#define C4 262
#define C4s 277
#define D4 294
#define D4s 311
#define E4 330
#define F4 349
#define F4s 370
#define G4 392
#define G4s 415
#define A4 440
#define A4s 466
#define B4 494
#define C5 523
#define C5s 554
#define D5 587
#define D5s 622
#define E5 659
#define F5 698
#define F5s 740
#define G5 784
#define G5s 831
#define A5 880
#define A5s 932
#define B5 988
#define C6 1047
void buzzer_on(uint16_t note);
void noTone(void);
void playSong(void);
void see_you_again(void);
#endif

View File

@ -26,17 +26,49 @@ fp32 M3508_PID[3]={4.9,0.01,0.0};
int16_t result; //速度环
float angleSet[MOTOR_NUM]; //位置环
//trigger
//编码器数据
const motor_measure_t *trigger_motor_data;//3508电机数据
pid_type_def t_speed_pid;//2006速度环pid结构体
pid_type_def t_angle_pid;//2006位置环pid结构体
fp32 M2006_speed_PID[3]={5.0,0.3,0.0}; //P,I,D(速度环)
fp32 M2006_angle_PID[3]={25.0,0.0,1.5}; //P,I,D(角度环)
//速度环pid参数
fp32 M2006_PID[3]={4.9,0.01,0.0};
int16_t t_result; //速度环 //can最后发送的数据
float t_angleSet[1]; //位置环
void motor_init(void)
{
motor_3508_data=get_motor_point(0);
// motor_3508_data=get_motor_point(0);
trigger_motor_data=get_motor_point(0);
// PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,3000,1000);
// PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,7000,2000);
PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,500000,500000);
PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,500000,100000);
// PID_init(&speed_pid,PID_POSITION,M3508_speed_PID,500000,500000);
// PID_init(&angle_pid,PID_POSITION,M3508_angle_PID,500000,100000);
PID_init(&t_speed_pid,PID_POSITION,M2006_speed_PID,500000,500000);
PID_init(&t_angle_pid,PID_POSITION,M2006_angle_PID,500000,100000);
}
float trigger_angle = 0;
void trigger_pos(fp32 angle)
{
int16_t delta[1];
delta[0]=PID_calc(&t_angle_pid,trigger_motor_data->total_angle,angle);
t_result=PID_calc(&t_speed_pid,trigger_motor_data->speed_rpm,delta[0]);
}
void motor_speed(fp32 speed)
{
@ -53,3 +85,4 @@ void motor_pos(fp32 angle)
result=PID_calc(&speed_pid,motor_3508_data->speed_rpm,delta[0]);
}

View File

@ -14,30 +14,11 @@ typedef enum
MOTOR_NUM
}motorput_e;
// //电机输出
// int16_t result[MOTOR_NUM]; //速度环
// float angleSet[MOTOR_NUM]; //位置环
// //电机状态
// motor_measure_t* putMotor[MOTOR_NUM];
// //翻转3508pid
// static const float M3508_speed_PID[3];
// static const float M3508_angle_PID[3];
// //前后与夹球2006pid
// static const float M2006_speed_PID[3];
// static const float M2006_angle_PID[3];
// //电机速度pid结构体
// pid_type_def speed_pid[MOTOR_NUM];
// //位置环pid
// pid_type_def angle_pid[MOTOR_NUM];
// //暂存目标位置
// //0上下1翻转2前后3夹球
// float angleSet[MOTOR_NUM];
void motor_init(void);
void motor_speed(fp32 speed);
void motor_pos(fp32 angle);
void trigger_pos(fp32 angle);
#endif

View File

@ -20,20 +20,17 @@ void gimbalInit(void)
for(i = 0;i < GO_NUM;i ++)
{
go.goData[i] = getGoPoint(i);//获取电机数据指针
// PID_init(&angle_pid[i],PID_POSITION,PID_angle,15,0.5);//pid初始化
// PID_init(&speed_pid[i],PID_POSITION,PID_speed,60,0.2);//pid初始化
// result[i] = 0;
go.angleSetgo[i] = 0;
go.offestAngle[i] = 0;
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
go.offestAngle[i] = go.goData[i]->Pos;
HAL_Delay(2000);
HAL_Delay(100);
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
go.offestAngle[i] = go.goData[i]->Pos;
HAL_Delay(2000);
HAL_Delay(100);
}
}

77
User/module/shoot.c Normal file
View File

@ -0,0 +1,77 @@
#include "shoot.h"
#include "remote_control.h"
extern RC_mess_t RC_mess;
extern motor_measure_t *trigger_motor_data;//3508电机数据
#define GO1_SHOOT 1
#define ODRIVE_SHOOT 0
#define KP 0.12
#define KD 0.008
#if GO1_SHOOT == 1
GO_SHOOT goshoot;
void shooterInit(void)
{
int i;
GO_M8010_init();
for(i = 0;i < GO_NUM;i ++)
{
goshoot.goData[i] = getGoPoint(i);//获取电机数据指针
goshoot.angleSetgo[i] = 0;
goshoot.offestAngle[i] = 0;
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
HAL_Delay(100);
// GO_M8010_send_data(&huart1, i,0,0,0,0,0,0);
GO_M8010_send_data(&huart6, i,0,0,0,0,0,0);
goshoot.offestAngle[i] = goshoot.goData[i]->Pos;
HAL_Delay(100);
}
}
void shoot_ball(int key)
{
//蓄力
if(trigger_motor_data->real_angle ==60)//扳机已闭合
{
goshoot.angleSetgo[0] = 10;
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
}
if (key ==2)//上升准备蓄力
{
goshoot.angleSetgo[0] = 0;
GO_M8010_send_data(&huart6, 0,0,0,goshoot.angleSetgo[0],1,KP,KD);
}
}
#elif ODRIVE_SHOOT == 1
void shoot_odrive(void)
{
//扳机
if(trigger_motor_data->real_angle == 60)
{
trigger_pos(0);
}
else
{
trigger_pos(60);
}
}
#endif

26
User/module/shoot.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef _SHOOT_H_
#define _SHOOT_H_
#include "GO_M8010_6_Driver.h"
#include "odrive_can.h"
#include "djiMotor.h"
#include "calc_lib.h"
#include "pid.h"
typedef struct
{
/* data */
GO_Motorfield* goData[GO_NUM];
//暂存目标位置
//0 left1 right
float angleSetgo[GO_NUM];
float offestAngle[GO_NUM];//go数据
float Kp;
float Kd;
float allowRange;
}GO_SHOOT;
void shooterInit(void);
void shoot_ball(int key);
#endif

View File

@ -63,5 +63,10 @@ const osThreadAttr_t attr_rc = {
.stack_size = 256 * 4,
};
//ball
const osThreadAttr_t attr_ball = {
.name = "ball",
.priority = osPriorityRealtime,
.stack_size = 256 * 4,
};

View File

@ -20,7 +20,7 @@
#define TASK_FREQ_MONITOR (2u)
#define TASK_FREQ_CAN (500u)
#define TASK_FREQ_AI (250u)
#define TASK_FREQ_REFEREE (1000u)
#define TASK_FREQ_BALL (500u)
#define TASK_INIT_DELAY_INFO (500u)
#define TASK_INIT_DELAY_MONITOR (10)
@ -43,7 +43,8 @@ typedef struct {
osThreadId_t dji_motor;
osThreadId_t shoot;
osThreadId_t go;
osThreadId_t nuc;
osThreadId_t nuc;
osThreadId_t ball;
} thread;
/* 电机的反馈和输出 */
@ -159,6 +160,7 @@ extern const osThreadAttr_t attr_shoot;
extern const osThreadAttr_t attr_go;
extern const osThreadAttr_t attr_nuc;
extern const osThreadAttr_t attr_rc;
extern const osThreadAttr_t attr_ball;
/* Exported functions prototypes -------------------------------------------- */
//声明一下任务
@ -178,4 +180,6 @@ void Task_nuc(void *argument);
void Task_Rc(void *argument);
void Task_Ball(void *argument);
#endif

29
User/task/ball_task.c Normal file
View File

@ -0,0 +1,29 @@
#include "ball_task.h"
#include "TopDefine.h"
#include "FreeRTOS.h"
#include "attrTask.h"
#include <cmsis_os2.h>
#include "remote_control.h"
#include "ball.h"
extern RC_mess_t RC_mess;
BASKETBALL basketball;
void Task_Ball(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
basketball.hand=0;
basketball.paw=0;
while(1)
{
handling_ball(basketball.hand, basketball.paw);
tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
}
}

5
User/task/ball_task.h Normal file
View File

@ -0,0 +1,5 @@
#ifndef _BALL_TASK_H_
#define _BALL_TASK_H_
#endif

View File

@ -14,7 +14,7 @@ extern motor_measure_t *motor_3508_data;
void Task_Can(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
// const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
djiInit();//FIFO滤波器初始化
Odrive_Can_Init();
@ -29,8 +29,8 @@ void Task_Can(void *argument)
//将can数据添加到消息队列
// tick += delay_tick; /* 计算下一个唤醒时刻 */
// osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
}
}

View File

@ -9,6 +9,7 @@
extern RC_mess_t RC_mess;
extern int16_t result;
extern int16_t t_result;
extern motor_measure_t *motor_3508_data;
float vofa[8];
/**
@ -24,7 +25,7 @@ void Task_Motor(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
// const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CHASSIS;
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CTRL_CHASSIS;
motor_init();
@ -37,18 +38,18 @@ void Task_Motor(void *argument)
//电机控制
//motor_speed(speed);
m=angle*(8191/360);
motor_pos(m);
// motor_pos(m);
trigger_pos(m);
//CAN_cmd_200(result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],result[MOTOR_UP],&hcan1);
CAN_cmd_200(result,0,0,0,&hcan1);
CAN_cmd_200(t_result,0,0,0,&hcan1);
osDelay(2);
// vofa[0]=motor_3508_data->speed_rpm;
// vofa[1]=speed;
// vofa_tx_main(vofa);
// tick += delay_tick;
// osDelayUntil(tick);
tick += delay_tick;
osDelayUntil(tick);
}

View File

@ -48,7 +48,10 @@ task_runtime.thread.nuc =
osThreadNew(Task_nuc, NULL, &attr_nuc);
// rc
task_runtime.thread.rc =
osThreadNew(Task_Rc, NULL, &attr_rc);
osThreadNew(Task_Rc, NULL, &attr_rc);
// ball
task_runtime.thread.ball =
osThreadNew(Task_Ball, NULL, &attr_ball);
/* 消息队列 */
//can

View File

@ -3,6 +3,7 @@
#include "FreeRTOS.h"
#include "main.h"
#include "led.h"
#include "buzzer.h"
void Task_Led(void *argument) {
(void)argument; /* 未使用argument消除警告 */
@ -10,9 +11,10 @@ void Task_Led(void *argument) {
for (;;) {
// LED_red();
LED_bule();
// LED_bule();
see_you_again();
// LED_green();
osDelay(500);
// osDelay(500);
}
}

View File

@ -15,11 +15,11 @@ void Task_nuc(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
// const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_AI;
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_AI;
NUC_Init(&cmd_fromnuc);
uint32_t tick = osKernelGetTickCount();
uint32_t tick = osKernelGetTickCount();
while(1)
{
@ -42,8 +42,8 @@ void Task_nuc(void *argument)
// osMessageQueuePut(task_runtime.msgq.cmd.raw.nuc,&(cmd_fromnuc),0,0);
osDelay(2);
// tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
// osDelayUntil(tick);
tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/
osDelayUntil(tick);
}
}

View File

@ -3,29 +3,37 @@
#include "FreeRTOS.h"
#include "attrTask.h"
#include <cmsis_os2.h>
#include "shoot_task.h"
#include "odrive_shoot.h"
#include "remote_control.h"
#include "shoot.h"
extern RC_mess_t RC_mess;
const odrive_msg_t *odrive_msg1;
#define GO1_SHOOT 1
#define ODRIVE_SHOOT 0
void Task_Shoot(void *argument)
{
(void)argument; /* 未使用argument消除警告 */
// const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
// odrive_CB();
// uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
const uint32_t delay_tick = osKernelGetTickFreq() / TASK_FREQ_CAN;
#if GO1_SHOOT == 1
shooterInit();
#endif
uint32_t tick = osKernelGetTickCount(); /* 控制任务运行频率的计算 */
while(1)
{
shootStep();
#if GO1_SHOOT == 1
shoot_ball(0);
odrive_get_encode(AXIS0_NODE);
odrive_msg1 = Get_Odrive_Point();
osDelay(2);
#elif ODRIVE_SHOOT == 1
shootStep();
#endif
// tick += delay_tick; /* 计算下一个唤醒时刻 */
// osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
tick += delay_tick; /* 计算下一个唤醒时刻 */
osDelayUntil(tick); /* 运行结束,等待下一个周期唤醒 */
}
}

View File

@ -67,8 +67,9 @@ Mcu.CPN=STM32F407IGH6
Mcu.Family=STM32F4
Mcu.IP0=CAN1
Mcu.IP1=CAN2
Mcu.IP10=USART3
Mcu.IP11=USART6
Mcu.IP10=USART1
Mcu.IP11=USART3
Mcu.IP12=USART6
Mcu.IP2=DMA
Mcu.IP3=FREERTOS
Mcu.IP4=NVIC
@ -76,8 +77,8 @@ Mcu.IP5=RCC
Mcu.IP6=SPI2
Mcu.IP7=SYS
Mcu.IP8=TIM1
Mcu.IP9=USART1
Mcu.IPNb=12
Mcu.IP9=TIM4
Mcu.IPNb=13
Mcu.Name=STM32F407I(E-G)Hx
Mcu.Package=UFBGA176
Mcu.Pin0=PB5
@ -93,21 +94,26 @@ Mcu.Pin17=PH12
Mcu.Pin18=PH11
Mcu.Pin19=PH10
Mcu.Pin2=PA14
Mcu.Pin20=PE9
Mcu.Pin21=PB12
Mcu.Pin22=PB13
Mcu.Pin23=PB14
Mcu.Pin24=PB15
Mcu.Pin25=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin26=VP_SYS_VS_Systick
Mcu.Pin20=PD14
Mcu.Pin21=PE13
Mcu.Pin22=PE9
Mcu.Pin23=PE11
Mcu.Pin24=PE14
Mcu.Pin25=PB12
Mcu.Pin26=PB13
Mcu.Pin27=PB14
Mcu.Pin28=PB15
Mcu.Pin29=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin3=PA13
Mcu.Pin30=VP_SYS_VS_Systick
Mcu.Pin31=VP_TIM4_VS_ClockSourceINT
Mcu.Pin4=PB7
Mcu.Pin5=PB6
Mcu.Pin6=PD0
Mcu.Pin7=PC11
Mcu.Pin8=PC10
Mcu.Pin9=PI7
Mcu.PinsNb=27
Mcu.PinsNb=32
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407IGHx
@ -174,6 +180,22 @@ PD0.Signal=CAN1_RX
PD1.Locked=true
PD1.Mode=CAN_Activate
PD1.Signal=CAN1_TX
PD14.GPIOParameters=GPIO_Label
PD14.GPIO_Label=buzzer
PD14.Locked=true
PD14.Signal=S_TIM4_CH3
PE11.GPIOParameters=GPIO_Label
PE11.GPIO_Label=key
PE11.Locked=true
PE11.Signal=GPIO_Output
PE13.GPIOParameters=GPIO_Label
PE13.GPIO_Label=down
PE13.Locked=true
PE13.Signal=GPIO_Output
PE14.GPIOParameters=GPIO_Label
PE14.GPIO_Label=paw
PE14.Locked=true
PE14.Signal=GPIO_Output
PE9.Locked=true
PE9.Signal=S_TIM1_CH1
PG14.Mode=Asynchronous
@ -272,6 +294,8 @@ RCC.VCOOutputFreq_Value=336000000
RCC.VcooutputI2S=192000000
SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1
SH.S_TIM1_CH1.ConfNb=1
SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3
SH.S_TIM4_CH3.ConfNb=1
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_32
SPI2.CLKPhase=SPI_PHASE_2EDGE
SPI2.CalculateBaudRate=1.3125 MBits/s
@ -285,6 +309,9 @@ TIM1.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,Pulse-PWM Generat
TIM1.Period=20000-1
TIM1.Prescaler=168-1
TIM1.Pulse-PWM\ Generation1\ CH1=2000
TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
TIM4.IPParameters=Channel-PWM Generation3 CH3,Period
TIM4.Period=20999
USART1.BaudRate=115200
USART1.IPParameters=VirtualMode,BaudRate
USART1.VirtualMode=VM_ASYNC
@ -299,5 +326,7 @@ VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM4_VS_ClockSourceINT.Mode=Internal
VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT
board=custom
rtos.0.ip=FREERTOS