首先要配置其硬件资源
温度采集:用ADC1的6路通道轮询采集数据,将采集的数据通过DMA的方式搬运到寄存器。
温度控制:用PA8和PB13进行温度的控制。
CobeMX的相关配置
一、基本设置
1.选择外部时钟
2.配置总线时钟频率
3.选择烧录方式(不带RTOS)
4.选择烧录方式(带RTOS)
主要是因为FreeRTOS要用到SysTick。
二、外围电路配置
1.配置DMA模式下的ADC多通道采样
配置ADC基本设置
增加DMA
ADC参数设置
ADC采样通道配置
开启ADC采样中断
2.配置通用定时器用作定时器中断(硬件定时器)
配置TIM6做1s的时间计时
补充:计时器计时计算公式
系统主频是168MHz,APB2时钟总线是2分频后的84MHz。
定时器的定时时间主要由TIMX_PSC和TIMX_ARR两个寄存器的值决定(定时器16位,故可设置值为65536)。
定时器频率是:f = 84MHz / 8400 / 10000 = 1Hz;
定时时间:T = 1s / f = 1s / 1 = 1s。
3.配置串口中断
在usart.c文件中的void MX_USART1_UART_Init(void)函数后面使能接收中断,添加如下函数:
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
/* 配置串口中断并使能,需要放在HAL_UART_Init函数后执行修改才有效 */
HAL_UART_Receive_IT(&huart1,(uint8_t *)&RxBuf,FRAME_LENTH); // 使能接收中断
}
/* 配置串口中断并使能,需要放在HAL_UART_Init函数后执行修改才有效 */
HAL_UART_Receive_IT(&huart1,(uint8_t *)&RxBuf,FRAME_LENTH); // 使能接收中断
三、FreeRTOS配置
1.配置定时器(使用FERRRTOS软件定时器,适用于精度不高的任务)
添加定时器任务及参数
在随后在生成的工程中找到freertos.c文件
添加如下程序:
void MX_FREERTOS_Init(void) {
/* Create the timer(s) */
/* definition and creation of myTimer */
osTimerDef(myTimer, OsTimerCallback);
myTimerHandle = osTimerCreate(osTimer(myTimer), osTimerPeriodic, NULL);
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
osStatus timerResult = osOK ;
timerResult = osTimerStart(myTimerHandle,1000);
/* USER CODE END RTOS_TIMERS */
....................}
osStatus timerResult = osOK ;
timerResult = osTimerStart(myTimerHandle,1000);//定时1秒钟
在osInterface.c中加入任务函数,这样每秒钟就会执行一次该任务中的事件函数。
void OsTimerCallback(void const * argument)
{
/* USER CODE BEGIN OsTimerCallback */
Output_Tempture();
Stop_Bit_Control();
Start_Bit_Control();
/* USER CODE END OsTimerCallback */
}