当前位置:网站首页>SCM stm32f103rb, BLDC DC motor controller design, schematic diagram, source code and circuit scheme
SCM stm32f103rb, BLDC DC motor controller design, schematic diagram, source code and circuit scheme
2022-06-24 07:57:00 【1ShyJn25】
be based on STM32 BLDC Design of Brushless DC motor controller , The schematic diagram and source code are attached . The source code is based on free and open source CoOS(UCOS similar ) Written on the operating system , While learning the control of brushless motor, you can also learn the knowledge of operating system . Also available for Matlab Of GUI The serial port receiving program and open source code , Receive speed and current information in real time , Easy PID test , And there are CAN(TJA1050) Interface . At the same time, you can modify and learn by yourself Matlab Of GUI Programming .


1.STM32F103RB processor The clock 72M Flash 64K RAM 20K
2.MOSFET SUD35N05-26L 55V 35A Rds=0.02
3. MOSFET drive IR2101S


Part of the code :
main.c
#include "includes.h"
/********************CoOS±äÁ¿**********************/
#define TASK_STK_SIZE 128
#define TASK0_PRIO 2
#define TASK1_PRIO 3
#define TASK2_PRIO 4
#define TASK3_PRIO 5
OS_STK STK_TASK0[TASK_STK_SIZE];
OS_STK STK_TASK1[TASK_STK_SIZE];
OS_STK STK_TASK2[TASK_STK_SIZE];
OS_STK STK_TASK3[TASK_STK_SIZE];
void TASK0(void *param);
void TASK1(void *param);
void TASK2(void *param);
void TASK3(void *param);
/*************************************************/
/*********************Ò»°ã±äÁ¿********************/
extern uint32_t Speed_count;
uint8_t USART_Flag = 0;
/*************************************************/
int main(void)
{
/* ƬÄÚÍâÉè³õʼ»¯ */
Periph_Init();
/* ²Ù×÷ϵͳ³õʼ»¯ */
CoInitOS();
CoCreateTask( TASK0, (void*)0, TASK0_PRIO, &STK_TASK0[TASK_STK_SIZE - 1], TASK_STK_SIZE);
CoCreateTask( TASK1, (void*)0, TASK1_PRIO, &STK_TASK1[TASK_STK_SIZE - 1], TASK_STK_SIZE);
CoCreateTask( TASK2, (void*)0, TASK2_PRIO, &STK_TASK2[TASK_STK_SIZE - 1], TASK_STK_SIZE);
CoCreateTask( TASK3, (void*)0, TASK3_PRIO, &STK_TASK3[TASK_STK_SIZE - 1], TASK_STK_SIZE);
CoStartOS();
while(1);
}
void TASK0(void *param)
{
uint8_t start_flag=0;
uint8_t sw_state = 1;
KEY_Init();
Speed_PIDInit();
for(;;)
{
//SW__Read()=1 Direction = SET
if(SW__Read()^sw_state)
{
if(start_flag)
{
BLDC_Stop();
}
sw_state = SW__Read();
if(sw_state)
{
Direction = SET;
}
else
{
Direction = RESET;
}
if(start_flag)
{
BLDC_Start();
}
}
if(KEY_Read(KEY1))
{
CoTickDelay(5);
if(KEY_Read(KEY1))
{
BLDC_Start();
start_flag = 1;
}
}
if(KEY_Read(KEY2))
{
CoTickDelay(5);
if(KEY_Read(KEY2))
{
BLDC_Stop();
start_flag = 0;
}
}
CoTickDelay(10);
}
}
void TASK1(void *param)
{
uint16_t adc_value= 0;
uint8_t i = 0;
for(;;)
{
adc_value= 0;
for(i=0;i<4;i++)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE); /* ʹÄÜת»»¿ªÊ¼ */
while(ADC_GetSoftwareStartConvStatus(ADC1));
adc_value += ADC_GetConversionValue(ADC1);
}
ADC_Speed = adc_value/4;
CoTickDelay(10);
}
}
void TASK2(void *param)
{
uint16_t data;
for(;;)
{
if(USART_Flag)
{
data = 1000000/(6*Speed_count);
USART_SendData( USART2, data);
USART_Flag = 0;
}
CoTickDelay(1);
}
}
void TASK3(void *param)
{
LED_Off();
for(;;)
{
LED_On();
CoTickDelay(200);
LED_Off();
CoTickDelay(200);
}
}
BLDC.c
#include "includes.h"
/**********³£Á¿¶¨Òå**********/
#define IDLE 0
#define START 1
#define RUN 2
#define STOP 3
#define FAULT 4
#define HIGH 1480
#define LOW 3
/*********È«¾Ö±äÁ¿***********/
u8 state; //Ö÷״̬
FlagStatus Direction = SET;//³õʼ»¯ºóΪÕýת
uint8_t stalling_count = 0; //¶Âת¼ÆÊýÆ÷
void Delay_us(uint8_t t);
/********************************************************************** * Description : ¶Ô¶¨Ê±Æ÷1ºÍ¶¨Ê±Æ÷3µÄGPIO¶¨Òå * Input : None * Output : None * Return : None * Attention : None **********************************************************************/
void BLDC_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10; //TIM1Êä³ö
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//TIM1Êä³ö
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //TIM3µÄ»ô¶ûÊäÈë
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM3µÄ»ô¶ûÊäÈë
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //TIM1_BKIN
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
// GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/********************************************************************** * Description : None * Input : None * Output : None * Return : None * Attention : None **********************************************************************/
void BLDC_TIM1Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //»ù±¾½á¹¹Ìå±äÁ¿¶¨Òå
TIM_OCInitTypeDef TIM_OCInitStructure; //Êä³ö½á¹¹Ìå±äÁ¿¶¨Òå
TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //ËÀÇøÉ²³µ½á¹¹Ìå±äÁ¿¶¨Òå
TIM_DeInit(TIM1);
TIM_TimeBaseStructure.TIM_Prescaler = 2; //TIM»ù±¾³õʼ»¯
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned2;//ÖÐÑë¶ÔÆë¼ÆÊýģʽ,Êä³ö±È½Ï±ê־λֻÓÐÔÚ±È½ÏÆ÷ÏòÉϼÆËã±»ÉèÖÃ
TIM_TimeBaseStructure.TIM_Period = 1500 - 1; //PWM 16K
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIMÊä³öͨµÀ³õʼ»¯
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
TIM_OCInitStructure.TIM_Pulse =1200;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;//TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse =1200;
TIM_OC2Init(TIM1,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_Pulse =1200;
TIM_OC3Init(TIM1,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIMÊä³öͨµÀ4³õʼ»¯£¬ÓÃÀ´´¥·¢AD×¢Èë²ÉÑù
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_Pulse =1495;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init(TIM1,&TIM_OCInitStructure);
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; //ËÀÇøÉ²³µ³õʼ»¯
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM_BDTRInitStructure.TIM_DeadTime = 100;
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; //Èç´ò¿ª£¬¿ª»úÎÞÊä³öÇÒ״̬ÎÉÂÒ£¿£¿£¿£¿
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low ;
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //ʹÄܲ¶»ñ±È½Ï¼Ä´æÆ÷Ô¤×°ÔØ£¨Í¨µÀ1£
TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable); //ʹÄܲ¶»ñ±È½Ï¼Ä´æÆ÷Ô¤×°ÔØ£¨Í¨µÀ2£
TIM_OC3PreloadConfig(TIM1,TIM_OCPreload_Enable); //ʹÄܲ¶»ñ±È½Ï¼Ä´æÆ÷Ô¤×°ÔØ£¨Í¨µÀ3£
TIM_SelectInputTrigger(TIM1, TIM_TS_ITR2); //ÊäÈë´¥·¢Ô´Ñ¡ÔñTIM3
//TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger);//´ÓģʽѡÔñ ´¥·¢
TIM_CtrlPWMOutputs(TIM1,ENABLE);
// TIM_ClearITPendingBit(TIM1, TIM_IT_Break|TIM_IT_COM);
// TIM_ITConfig(TIM1, TIM_IT_Break | TIM_IT_COM ,ENABLE);
TIM_ClearITPendingBit( TIM1, TIM_IT_COM);
TIM_ITConfig(TIM1, TIM_IT_COM ,ENABLE);
TIM_Cmd(TIM1,ENABLE);
}
/********************************************************************** * Description : None * Input : None * Output : None * Return : None * Attention : None **********************************************************************/
void BLDC_TIM3Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //»ù±¾½á¹¹Ìå±äÁ¿¶¨Òå
TIM_ICInitTypeDef TIM_ICInitStructure; //¶¨Òå½á¹¹Ìå±äÁ¿
TIM_OCInitTypeDef TIM_OCInitStructure; //Êä³ö½á¹¹Ìå±äÁ¿¶¨Òå
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Prescaler = 71; //TIM»ù±¾³õʼ»¯
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period =65535;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //Ñ¡ÔñͨµÀ1
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //ÊäÈëÉÏÉýÑØ²¶»ñ
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_TRC; //ÅäÖÃͨµÀΪÊäÈ룬²¢Ó³Éäµ½ÄÄÀï
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //ÊäÈë²¶»ñÔ¤·ÖƵֵ
TIM_ICInitStructure.TIM_ICFilter = 10; //ÊäÈëÂ˲¨Æ÷´ø¿íÉèÖÃ
TIM_ICInit(TIM3, &TIM_ICInitStructure); //ÊäÈëͨµÀÅäÖÃ
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIMÊä³öͨµÀ³õʼ»¯
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse =1023;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; //TIMÊä³öͨµÀ³õʼ»¯
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;
TIM_OCInitStructure.TIM_Pulse =65535;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
TIM_SelectHallSensor(TIM3,ENABLE); //ʹÄÜTIMxµÄ»ô¶û´«¸ÐÆ÷½Ó¿Ú
TIM_SelectInputTrigger(TIM3, TIM_TS_TI1F_ED); //ÊäÈë´¥·¢Ô´Ñ¡Ôñ
TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //´ÓģʽѡÔñ
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);//Ö÷´ÓģʽѡÔñ
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_OC2Ref); //Ñ¡ÔñÊä³ö´¥·¢Ä£Ê½(TRGO¶Ë)
TIM_ITConfig(TIM3, TIM_IT_Trigger|TIM_IT_CC4, ENABLE); //¿ª¶¨Ê±Æ÷ÖжÏ
//TIM_Cmd(TIM3,ENABLE);
}
/********************************************************************** * Description : None * Input : None * Output : None * Return : None * Attention : None **********************************************************************/
void huanxiang(void)
{
u8 Hall_data = 0;
Hall_data=(u8)((GPIOA->IDR&0x000000c0)>>6); //¶Áת×ÓλÖÃ
Hall_data|=(u8)((GPIOB->IDR&0x00000001)<<2);
if(Direction)
{
//Õýת
switch(Hall_data) //¸ù¾Ýת×ÓλÖ㬾ö¶¨CCERÊä³öÏàλºÍת×Ó×ÖÆ«ÒÆÁ¿
{
case 0x05:{
TIM1->CCER=0x3081; //1,4
};break;
case 0x04:{
TIM1->CCER=0x3180; //4,5
};break;
case 0x06:{
TIM1->CCER=0x3108; //2,5
};break;
case 0x02:{
TIM1->CCER=0x3018; //2,3
};break;
case 0x03:{
TIM1->CCER=0x3810; //3,6
};break;
case 0x01:{
TIM1->CCER=0x3801; //1,6
};break;
default:break;
}
}
else
{
//·´×ª
switch(Hall_data) //¸ù¾Ýת×ÓλÖ㬾ö¶¨CCERÊä³öÏàλºÍת×Ó×ÖÆ«ÒÆÁ¿
{
case 0x05:{
TIM1->CCER=0x3018; //2 3
};break;
case 0x04:{
TIM1->CCER=0x3810; //3 6
};break;
case 0x06:{
TIM1->CCER=0x3801; //1 6
};break;
case 0x02:{
TIM1->CCER=0x3081; //1 4
};break;
case 0x03:{
TIM1->CCER=0x3180; //4 5
};break;
case 0x01:{
TIM1->CCER=0x3108; //2 5
};break;
default:break;
}
}
}
/**************Æô¶¯******************/
void BLDC_Start(void)
{
TIM1->SMCR|=0x0006; //¿ªTIM1µÄÊäÈë´¥·¢
TIM1->DIER=0x0040; //¿ªTIM1µÄ´¥·¢ÖжÏ
huanxiang(); //µ÷Óû»Ïòº¯Êý£¬Æô¶¯
TIM3->CR1|=0x0001; //¿ªTIM3
TIM3->DIER|=0x0050; //¿ªTIM3ÖжÏ
}
void BLDC_Stop(void)
{
TIM1->SMCR&=0xfff8; //¹Ø±ÕTIM1µÄÊäÈë´¥·¢
TIM1->CCER=0; //¹Ø±ÕTIM1µÄÁù·Êä³ö
Delay_us(40); //ÑÓʱ£¨¼ÓËÀÇø£
TIM1->CCER=0x0ccc; //´ò¿ªÈý·Ï¹ܣ¬½øÐÐÄܺÄÖÆ¶¯
while(stalling_count<1); //µÈ´ýµç»úÍ£Ö¹£¨TIM3Á¬ÐøÒç³ö10´Î£¬¼´ÈÏΪµç»úÒÑͣת£
TIM1->CCER=0; //¹Ø±ÕTIM1µÄÁù·Êä³ö£¬¹ØÉ²³µ
TIM3->CR1&=0xfffe; //¹Ø±ÕTIM3
TIM3->CNT=0; //ÇåTIM3µÄ¼ÆÊýÆ÷
TIM3->DIER&=0xffaf; //¹ØTIM3ÖжÏ
}
void Delay_us(uint8_t t)
{
while(t--)
{
}
}
/**************Í£Ö¹******************/
/*void stop(void) { TIM1->SMCR&=0xfff8; //¹Ø±ÕTIM1µÄÊäÈë´¥·¢ TIM1->CCER=0; //¹Ø±ÕTIM1µÄÁù·Êä³ö Delay(20); //ÑÓʱ£¨¼ÓËÀÇø£ TIM1->CCER=0x0ccc; //´ò¿ªÈý·Ï¹ܣ¬½øÐÐÄܺÄÖÆ¶¯ while(duzhuan_value<1); //µÈ´ýµç»úÍ£Ö¹£¨TIM3Á¬ÐøÒç³ö10´Î£¬¼´ÈÏΪµç»úÒÑͣת£ TIM1->CCER=0; //¹Ø±ÕTIM1µÄÁù·Êä³ö£¬¹ØÉ²³µ TIM3->CR1&=0xfffe; //¹Ø±ÕTIM3 TIM3->CNT=0; //ÇåTIM3µÄ¼ÆÊýÆ÷ TIM3->DIER&=0xffaf; //¹ØTIM3ÖÐ¶Ï data_reset(); //¸´Î»ÔËÐвÎÊý }*/
BLDC.h
#ifndef BLDC_H
#define BLDC_H
extern FlagStatus Direction;
extern void BLDC_GPIOConfig(void);
extern void BLDC_TIM1Config(void);
extern void BLDC_TIM3Config(void);
extern void huanxiang(void);
extern void BLDC_Start(void);
extern void BLDC_Stop(void);
#endif
usart.c
#include "includes.h"
/** *@Function *@Description *@Calls *@Call By *@Param xxx * @arg * @arg *@Param xxx * @arg * @arg *@Reture *@Others **/
void USART1_GPIOConfig(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* ÅäÖÃ USART1 Tx (PA9) */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; /* ¸´ÓÃÍÆÍìÊä³öģʽ */
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; /* Êä³ö×î´óƵÂÊΪ50MHz */
GPIO_Init(GPIOA, &GPIO_InitStruct);
/* ÅäÖÃ USART1 Rx (PA10) */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* ¸¡¿ÕÊäÈëģʽ */
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/*************************************************** * Descirbe : * Input : * Output : * Attention : * author : ***************************************************/
void USART1_NVICConfig(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
}
/** *@Function *@Description *@Calls *@Call By *@Param xxx * @arg * @arg *@Param xxx * @arg * @arg *@Reture *@Others **/
void USART1_Config(void)
{
USART_InitTypeDef USART_InitStruct;
/* USART and USART2 configured as follow: - BaudRate = 9600 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */
USART_InitStruct.USART_BaudRate = 9600;
USART_InitStruct.USART_StopBits = USART_StopBits_1;
USART_InitStruct.USART_WordLength = USART_WordLength_8b;
USART_InitStruct.USART_Parity = USART_Parity_No;
USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* ÅäÖô¿Ú1 */
USART_Init(USART1, &USART_InitStruct);
/* ´¿Ú1½ÓÊÕÖжÏʹÄÜ USART_IT_RXNE : ½ÓÊÕ²»¿ÕÖÐ¶Ï */
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
/* ʹÄÜ´¿Ú1 */
USART_Cmd(USART1, ENABLE);
}
/** *@Function *@Description *@Calls *@Call By *@Param xxx * @arg * @arg *@Param xxx * @arg * @arg *@Reture *@Others **/
void USART1_SendString(char* data)
{
unsigned char i = 0;
for (i=0; data[i] != '\0'; i++)
{
USART_SendData( USART1, data[i]);
while( USART_GetFlagStatus(USART1 , USART_FLAG_TXE) == RESET );
/* ·¢ËÍÊý¾ÝÖ±µ½ USART_FLAG_TXE ·¢ËÍ¿ÕÎªÕæ,¾Í¿ÉÒÔ½øÐÐÏ´η¢ËÍ */
}
}
usart.h
#ifndef _USART1_H
#define _USART1_H
extern void USART1_GPIOConfig(void);
extern void USART1_Config(void);
extern void USART1_NVICConfig(void);
extern void USART1_SendString( char* data);
extern u8 ASCII_Buff[5];
#endif
边栏推荐
- Case examples of corpus data processing (cases related to sentence retrieval)
- Baidu map, coordinate inversion, picking coordinate position
- Mysql database recovery case sharing
- Oracle advanced SQL qualified query
- OpenGauss数据库在 CentOS 上的实践,配置篇
- chrono 使用备注
- Timer usage notes
- UTC、GMT、CST
- Take my brother to make a real-time Leaderboard
- AWTK 最新动态:Grid 控件新用法
猜你喜欢

Cold thinking on the hot track: multiplier effect is the fundamental requirement of East West calculation
![LeetCode 515 在每个数行中找最大值[BFS 二叉树] HERODING的LeetCode之路](/img/16/011ba3aef1315c39526daac7e3ec89.png)
LeetCode 515 在每个数行中找最大值[BFS 二叉树] HERODING的LeetCode之路
![[C language] system date & time](/img/de/faf397732bfa4920a8ed68df5dbc48.png)
[C language] system date & time

Open cooperation and win-win future | Fuxin Kunpeng joins Jinlan organization

Basics of reptile B1 - scrapy (learning notes of station B)

【资料上新】迅为基于3568开发板的NPU开发资料全面升级

Case examples of corpus data processing (cases related to sentence retrieval)

用Ngrok 配置属于自己的免费外网域名

GPU is not used when the code is running

Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its
随机推荐
IndexError: Target 7 is out of bounds.
Backup and restore SQL Server Databases locally
Configure your own free Internet domain name with ngrok
ImportError: cannot import name ‘process_ pdf‘ from ‘pdfminer. Pdfinterp 'error completely resolved
exness:鲍威尔坚持抗通胀承诺,指出衰退是可能的
1-4metasploitable2介绍
BOM笔记
随机数备注
常见的数组封装
Explain the input attribute in PHP (hide the read-only restriction)
Quickly set up PgSQL for serverless
Pair class notes
Leetcode 174 Dungeon games (June 23, 2022)
鸿蒙开发四
3-列表简介
Any remarks
Part 2: drawing a window
Mousse shares listed on Shenzhen Stock Exchange: gross profit margin continued to decline, and marketing failed in the first quarter of 2022
Wechat cloud hosting hot issues Q & A
Jenkins is too old try it? Cloud native ci/cd Tekton