本系列须知:
- 本博客中stm32入门系列是一些基础外设的使用,所用为正点原子stm32f103zet6精英版
- 使用的是hal库和cubemx
本实验内容如下
学会使用串口
通过ADC来读取电压,通过串口发送
通过DAC改变输出电压,用万用表测量
使用串口
【串口通信-HAL库】初学阻塞式收发_哔哩哔哩_bilibili
该视频中【串口通信—HAL库】初学阻塞式收发即使用串口教学,非常简单清晰
ps.一定要注意串口发送的为uint8类型的数据,如果要发uint32的,需要进行转换。
需要进阶的话,即用printf输出串口信息的话,则看它下面一则视频,记得打开魔术棒,选择Target,勾上Use MicroLIB,具体如下stm32中printf函数无法向串口输出问题解决_stm32 解决printf中%f不能输出的问题 分解-CSDN博客
ADC
【ADC-HAL库】轮询方式读取电压值_哔哩哔哩_bilibili
STM32对HAL库的ADC(单通道非DMA) - 无乐不作丶 - 博客园该博客讲了一下小细节
ps.记得先配置引脚,adc是读取引脚的电压值!!!
1 2 3 4 5 6 7 8 9 10 11 12 13
| while (1) {
HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1,50); if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)) { value = HAL_ADC_GetValue(&hadc1); printf("adc = %fV\r\n",value*3.3/4096); } }
|
DMA读取ADC
【ADC-HAL库】DMA方式多通道采集_哔哩哔哩_bilibili
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| while (1) {
HAL_Delay(500); for(uint8_t i = 0 ;i<100;) { adc4 = ADC1_value[i++]; adc5 = ADC1_value[i++]; } adc4 = adc4 / 50; adc5 = adc5 / 50; printf("adc4 = %fV\r\n",adc4*3.3/4096); printf("adc5 = %fV\r\n",adc5*3.3/4096);
}
|
DAC
【DAC-HAL库】数模转换_哔哩哔哩_bilibili
STM32单片机开发入门(三) 万用表的介绍及使用方法_stm32万用表-CSDN博客
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init(); MX_USART1_UART_Init(); MX_DAC_Init();
HAL_DAC_Start(&hdac,DAC_CHANNEL_1); set_dac(2); while (1) {
} }
void set_dac(float v) { HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,v/3.3*4096); }
|