Day六、DAC
对应的引脚为
ADC1 PA4 -> OU1
PA5->OUT2
均设置输出到外设。
//DAC
u16 dac_ch1_val, dac_ch2_val;
void DAC_Process(float dac_ch1_val,float dac_ch1_va2)
{
dac_ch1_val = (dac_ch1_val / 3.3f * 4095);
dac_ch2_val = (dac_ch1_va2 / 3.3f * 4095);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, dac_ch1_val); //0-->0v 4095--> 3.3V 1.1v --> 1365
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, dac_ch2_val); //0-->0v 4095--> 3.3V 2.2v --> 2730
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
}
Day七、RTC
首先要配置正确
根据这个时钟树,我们知道RTC采用内部低速时钟为32KHz,
1、两个都要打开
2、设置初始时间和日期
3、根据时钟树设置成1hz
编写代码:
1、获取时间,获取日期函数,
将数据显示在LCD上,
//RTC
RTC_TimeTypeDef rtc_time;
RTC_DateTypeDef rtc_date;
void RTC_Process()
{
HAL_RTC_GetTime(&hrtc, &rtc_time, RTC_FORMAT_BIN);//获取时间
HAL_RTC_GetDate(&hrtc, &rtc_date, RTC_FORMAT_BIN);//获取日期
u8 display_buf[20];
sprintf((char *)display_buf, "Time: %02d-%02d-%02d", rtc_time.Hours, rtc_time.Minutes, rtc_time.Seconds);
LCD_DisplayStringLine(Line5, display_buf); //显示时间
}
Day八、UART1 串口学习
1、数据的发送
打开异步通信模式,PA9 PA10默认模式,直接生成,
然后引用头文件
#include <stdio.h>
其次编写重定向文件
//重定向printf函数为串口输出
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (unsigned char *)&ch, 1, 50);
return ch;
}
2、数据的接收,固定格式
CubeMAX配置时打开中断接受功能即可,
同时在代码中添加启动接收中断功能函数
法一、可用,但是数据很难保存
HAL_UART_Receive_IT(&huart1,uart_buf,1); //开启串口接收中断
//串口接收
u8 uart_buf[2];
u8 rx_buf[10];
u8 rx_cnt = 0;
__IO uint32_t uartTick = 0;
void RxIdle_Process()
{
if(uwTick - uartTick < 50) return ;
uartTick = uwTick;
//50ms执行一次
rx_cnt = 0;
memset(rx_buf, '\0', sizeof(rx_buf)); //清空接收缓存数组
}
//串口接收回调函数
v