前言
之前都是用HAL库+实际单片机进行调试,网上proteus教程多基于51单片机且并非HAL库,本文便基于proteus仿真stm32——流水灯,利用Cube MX+Keil5+proteus来实现8个led依次交替闪烁,并且总结自己踩过的大坑,如有问题请多多指教。
Cube MX配置
芯片选择
proteus能够选择的stm32单片机有限,此次试验采用F103R6进行仿真
SYS、RCC配置
GPIO
选择PC0~PC7共8个引脚,且输出模式均设置为高电平,其他不用修改
Clock Configuration
其他
基本配置完成后即可生成代码(generate code)
Keil5 代码编写
由于实现工程的代码体量并不大,(相关模式配置及初始化均之前在Cube Mx 中已经完成)以下代码全部写在main.c中即可
宏定义待设置端口位
数组初始化
led灯控制
/* USER CODE BEGIN PFP */
void led_control(uint8_t led_number)//控制led闪烁的函数,传入参数为所对应的led编号
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_PIN_SET);//将所有led灯都熄灭
HAL_GPIO_WritePin(GPIOC,GPIO_PIN[led_number],GPIO_PIN_RESET);//对应的led灯点亮
}
主函数
/* USER CODE BEGIN 2 */
int led_number=0;//定义代表led编号的变量初始化为0
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
led_control(led_number);//调用控制对应led灯点亮的函数
HAL_Delay(200);//延时200ms
led_number++;//led编号加1
if(led_number==8)//当编号为8时完成一次点亮,将其置0,继续重新依次点亮led
led_number=0;
}
/* USER CODE END 3 */
也可以利用标志位flag实现另外一种流水灯的效果,代码如下,感兴趣或许可以试试
proteus仿真
详细步骤可以参考:
proteus创建工程、芯片选择、元件配置操作方法
代码不同,不过proteus配置还是完全一样的方法。
建议一步步按步骤来,常见踩坑
第四步:设置晶振8MHZ一定不能省略
led灯连线时注意不能接反
否则到时候没有现象,程序也没有报错,很难找到原因,这时候可能因为自己不熟悉proteus的操作而在某些方面的配置没有谨慎小心文章来源:https://www.toymoban.com/news/detail-422334.html
总结
proteus软件原本是主要用于绘制PCB板,辅以仿真功能,如今仿真功能愈加常见。所以用proteus仿真不一定要像实际单片机一样找到其所有引脚对应的原理图才能编写程序,相当于你自己设计其内部电路,用于实现底层设计的正确性,应该熟悉相关基本操作并且注意细节文章来源地址https://www.toymoban.com/news/detail-422334.html
到了这里,关于proteus仿真stm32——流水灯(Cube MX+Keil5+proteus操作详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!