STM32CubeMX个人记录
个人使用
仅作记录
防止遗忘
文章目录
- 2022-12-15 新建,基础配置,生成配置
- 2022-12-15 ADC配置
- 2022-12-17 us级延时配置(TIM3)
- 2022-12-17 串口配置(uart1)
2022-12-15 新建,基础配置,生成配置
新建,输入型号

双击型号,进入相应型号编辑窗口,如图


配置下载方式,个人使用自制ST-LINK V2下载,所以是通过SWDIO和SWCLK下载,选择Serial Wire

配置时钟,个人使用高速时钟,低速时钟暂时不使用,所以只开启高速时钟

配置晶振,个人偏好24MHZ晶振,如图配置,其他为自动生成

配置生成模式,个人使用keil编写,该模式为个人编写习惯


2022-12-15 ADC配置
选择引脚,使能ADC

配置参数(个人习惯)


2022-12-17补充:调用代码
//ADC-扫描
void ADC_saomiao(void) //ADC-扫描
{unsigned char i,j;if(index_adc){index_adc = 0;for(j=0;j<5;j++) //读取5次求平均值{for(i=0;i<3;i++) //读取3组ADC{HAL_ADC_Start(&hadc1); //开启ADC转换HAL_ADC_PollForConversion(&hadc1 ,10); //等待转换完成,超时时间:50msadcBuf[i] += HAL_ADC_GetValue(&hadc1); //将ADC值存入数组}}//处理ADC值//取出ADC值并显示a1_adc_value = adcBuf[0] / 5; //ADC值A1_xs[3] = a1_adc_value / 1000 % 10 + 0x30;A1_xs[4] = a1_adc_value / 100 % 10 + 0x30;A1_xs[5] = a1_adc_value / 10 % 10 + 0x30;A1_xs[6] = a1_adc_value / 1 % 10 + 0x30;//ADC电压v_adc_value = adcBuf[1] / 5 * (3.3 / 4096) * 2; //电压//清空数组adcBuf[0] = 0;adcBuf[1] = 0;adcBuf[2] = 0;//停止ADC转换HAL_ADC_Stop(&hadc1);}
}
2022-12-17 us级延时配置(TIM3)
us级延时配置(TIM3)

调用代码
//延时初始化
void Delay_Init(void) //延时初始化
{HAL_TIM_Base_Start_IT(&htim3); //打开定时器3中断
}//微秒级延时
void Delay_us(uint16_t nus) //微秒级延时
{__HAL_TIM_SET_COUNTER(&htim3, 0);while((__HAL_TIM_GET_COUNTER(&htim3)) < nus);
}
2022-12-17 串口配置(uart1)
串口配置(个人使用习惯)


uart.c文件
unsigned char Res1_Buf[1024]; //串口1接收缓存数组
unsigned char Res1_Sign = 0; //串口1接收标志位
unsigned int Res1_Count = 0; //串口1接收数据计数器
unsigned char Res1_Flag = 0; //串口1接收数据完成标志位//串口初始化
void Uart_Init(void) //串口初始化
{__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE); //打开串口1接收中断
}//串口1接收函数
void Uart1_Receiver(void) //串口1接收函数
{unsigned char Res = 0;if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE) != RESET) //判断串口1是否接收到字节{HAL_UART_Receive(&huart1, &Res, 1, 1000);Res1_Buf[Res1_Count++] = Res; //取出串口2接收到的数据并存入Res1_Buf数组中Res1_Sign = 1; //串口1接收标志位置1Res1_Flag = 0; //串口1接收数据完成标志位清零}
}//清空接收串口1数组程序
void QK_SZ1(void) //清空接收串口1数组程序
{memset(Res1_Buf, 0,strlen((const char *)Res1_Buf)); //清零串口1数组Res1_Count = 0;Res1_Sign = 0;
}
uart.h文件
extern unsigned char Res1_Buf[1024]; //串口1接收缓存数组
extern unsigned char Res1_Sign; //串口1接收标志位
extern unsigned int Res1_Count; //串口1接收数据计数器
extern unsigned char Res1_Flag; //串口1接收数据完成标志位void Uart_Init(void); //串口初始化
void Uart1_Receiver(void); //串口1接收函数
void QK_SZ1(void); //清空接收串口1数组程序
发送及重定义函数
HAL_UART_Transmit(&huart1, cmd, len, 1000); //串口发送函数(串口编号,待发送字符串,待发送字符串长度,发送等待时间)//printf重定义,串口2 (使用时放于主函数)
int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart2,(uint8_t *)&ch,1,0xff);return ch;
}
具体配置
将Uart1_Receiver函数置于stm32f1xx_it.c的USART1_IRQHandler函数中
并屏蔽掉HAL_UART_IRQHandler函数

具体使用
if(Res1_Sign == 1) //串口1接收标志位
{//接收到最后一个字节,再延时5msdo{Res1_Flag++;HAL_Delay(1);}while(Res1_Flag < 5); //等待串口1接收完成Res1_Sign = 0; //串口1接收标志位清零Res1_Flag = 0; //串口1接收数据完成标志位//对接受的数组进行处理Res1_Count = 0; //串口1接收数据计数器清零
}
个人使用
仅作记录
防止遗忘
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
