stm32用cubemx开发HAL库串口协议控制PWM灯亮度带proteus仿真(一)硬件配置

发布时间:2023年12月26日

用HAL库写一个stm32F103C8T6的程序,要求是用串口发送数据协议,控制PB5的PWM输出,PB5接LED小灯。用1表示100%亮度,以此类推9表示10%亮度。0关闭LED灯既0%亮度。用串口一接收字符。PA9,PA10。cubemx怎么配置如下:

在STM32CubeMX中,你需要进行以下配置:

1. 选择你的微控制器型号(STM32F103C8T6)。

配置外部时钟8mhz。

2. 在Pinout & Configuration选项卡中,配置以下引脚:
- PA9 和 PA10 设置为USART1TX 和 USART1_RX。

串口接收中断开启

在STM32CubeMX中,你可以按照以下步骤开启串口接收中断:

1. 在左侧的Peripherals列表中找到你刚才选择的串口(例如USART1),并点击它。

2. 在弹出的串口配置窗口中,找到NVIC?Settings选项卡,然后勾选USARTx?global?interrupt(x是你选择的串口编号)。

3. 点击窗口底部的OK按钮,然后你就完成了串口接收中断的开启。

在生成的代码中,你需要调用HAL_UART_Receive_IT()函数来启动串口接收中断,并实现HAL_UART_RxCpltCallback()函数来处理接收到的数据。例如:

uint8_t received_data;
HAL_UART_Receive_IT(&huart1, &received_data, 1);

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
? if (huart->Instance == USART1)
? {
??? // 处理接收到的数据
??? // ...

??? // 重新启动串口接收中断
??? HAL_UART_Receive_IT(&huart1, &received_data, 1);
? }
}


- PB5 设置为TIM_PWM。

? PB5 设置为TIM_PWM。怎么设置?

???? 1). 在左侧的MCU Pinout列表中找到PB5。

???? 2). 点击PB5旁边的下拉菜单,你会看到一个列表,其中包含所有可用的PB5功能。

??? 3). 在这个列表中找到TIMx_CHy(x是定时器的编号,y是通道的编号),例如TIM3CH2。选择这个选项。

??? 4). 在左侧的Peripherals列表中,找到你刚才选择的定时器(例如TIM3),并点击它。

??? 5). 在弹出的定时器配置窗口中,找到你刚才选择的通道(例如Channel2),并在Channel的下拉菜单中选择PWM Generation CHy。

??? 6). 点击窗口底部的OK按钮,然后你就完成了PB5的TIM_PWM设置。


3. 在Peripherals选项卡中,启用以下外设:
- USART1 设置为Asynchronous mode。
- TIMx 设置为PWM Generation CHx(x是你选择的定时器和通道)。

4. 在Configuration选项卡中,配置以下参数:
- USART1 参数根据你的通信需求进行设置,例如波特率、数据位、停止位等。


- TIMx PWM参数,设置PWM频率和占空比。

在STM32CubeMX中,你可以按照以下步骤设置PWM频率和占空比:

1. 在左侧的Peripherals列表中找到你刚才选择的定时器(例如TIM3),并点击它。

2. 在弹出的定时器配置窗口中,你可以设置PWM频率和占空比。

- 频率:在Timer的Parameter?Settings选项卡中,你可以设置Prescaler和Counter?Period(AutoReload?Register)来调整PWM的频率。频率的计算公式为:PWM?frequency?=?Timer?clock?frequency?/?((Prescaler?+?1)?*?(Counter?Period?+?1))。

- 占空比:在PWM?Generation?Channel的Configuration选项卡中,你可以设置Pulse(Capture/Compare?Register)来调整PWM的占空比。占空比的计算公式为:Duty?cycle?=?Pulse?/?(Counter?Period?+?1)。

说点人话这块,这些数值都设置成多少,我们的外部时钟是8mhz,主频是72mhz?

假设你想要的PWM频率是1kHz,占空比是50%。首先,我们需要计算Prescaler和Counter?Period的值。

1.?设置PWM频率:

使用公式?PWM?frequency?=?Timer?clock?frequency?/?((Prescaler?+?1)?*?(Counter?Period?+?1)),我们可以得到:

1kHz?=?72MHz?/?((Prescaler?+?1)?*?(Counter?Period?+?1))

为了简化计算,我们可以先设置Prescaler为71,这样Timer?clock?frequency就变为1MHz(72MHz?/?(71?+?1))。然后设置Counter?Period为999,这样PWM频率就变为1kHz(1MHz?/?(999?+?1))。

所以,Prescaler设置为71 == 72-1,Counter?Period设置为999 == 1000-1。

2.?设置PWM占空比:

使用公式?Duty?cycle?=?Pulse?/?(Counter?Period?+?1),我们可以得到:

50%?=?Pulse?/?(999?+?1)

解这个方程,我们得到Pulse为500。

所以,Pulse设置为500。

在STM32CubeMX中,你需要在Timer的Parameter?Settings选项卡中设置Prescaler为71,Counter?Period为999。然后在PWM?Generation?Channel的Configuration选项卡中设置Pulse为500。

Pulse在代码里面改成变量备用。

3. 点击窗口底部的OK按钮,然后你就完成了PWM频率和占空比的设置。

注意:这些设置在代码运行时可以动态修改。例如,你可以使用__HAL_TIM_SET_PRESCALER()和__HAL_TIM_SET_AUTORELOAD()函数来改变PWM的频率,使用__HAL_TIM_SET_COMPARE()函数来改变PWM的占空比。

5. 最后,点击Project选项卡,设置你的项目名称和位置,选择你的IDE,然后点击Generate Code。

代码下载地址:百度网盘。

链接:https://pan.baidu.com/s/1sdNmqjvlp3wK1VS91BexIw?pwd=0hid
提取码:0hid
--来自百度网盘超级会员V1的分享

文章来源:https://blog.csdn.net/2301_81235726/article/details/135204703
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。