当前位置:   article > 正文

基于STM32实现流水灯【Proteus仿真】

基于STM32实现流水灯【Proteus仿真】

详情更多 wechat:嵌入式工程师成长日记

https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247485624&idx=1&sn=4e553234c2624777409bd2067a07aad8&chksm=cf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&token=767249363&lang=zh_CN#rdicon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzg4Mzc3NDUxOQ==&mid=2247485624&idx=1&sn=4e553234c2624777409bd2067a07aad8&chksm=cf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&token=767249363&lang=zh_CN#rd

通过配置寄存器初始化LED:

代码:

//LED IO初始化void LED_Init(void){  RCC->APB2ENR|=1<<4;    //使能PORTC时钟  GPIOC->CRL&=0X00000000;//清零  GPIOC->CRL|=0X33333333;//推挽50MHz输出  GPIOC->ODR=0X00FF;      //输出高}

①CRL寄存器(端口配置低寄存器):

图片

②APB2外设时钟使能寄存器:

图片

③ODR端口输出数据寄存器:

图片

总结:


STM32每个IO端口都有7个寄存器控制:

  1. 1.两个32位 端口配置寄存器-- CRL和CRH
    2.两个32位 数据寄存器-- IDR和ODR
    3.一个32位 置位/复位寄存器-- BSRR
    4.一个16位 复位寄存器-- BRR
    5.一个32位 锁存寄存器-- LCKR

  2. 主程序(main.c):

  1. #include "main.h"
  2. void KEY_IO_Init(void);//按键初始化
  3. void EXTIx_Init(void);//外部中断
  4. void EXTI0_IRQHandler(void);
  5. void EXTI1_IRQHandler(void);
  6. //LED IO初始化
  7. void LED_Init(void)
  8. {
  9. RCC->APB2ENR|=1<<4; //使能PORTC时钟
  10. GPIOC->CRL&=0X00000000;//清零
  11. GPIOC->CRL|=0X33333333;//推挽50MHz输出
  12. GPIOC->ODR=0X00FF; //输出高
  13. }
  14. int main(void){
  15. uint8_t count_i;
  16. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断向量分组 2
  17. KEY_IO_Init();
  18. EXTIx_Init();//外部中断初始化
  19. while(1){
  20. LED_Init();//初始化与LED连接IO口
  21. while(1)
  22. {
  23. }
  24. }
  25. return 0;
  26. }
  27. void KEY_IO_Init(void)//按键初始化
  28. {
  29. GPIO_InitTypeDef GPIO_InitStructure;
  30. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
  31. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //按键输入端口配置
  32. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  33. GPIO_Init(GPIOB, &GPIO_InitStructure);
  34. }
  35. void EXTIx_Init(void)//外部中断
  36. {
  37. NVIC_InitTypeDef NVIC_InitStructure; //NVIC寄存器结构体变量
  38. EXTI_InitTypeDef EXTI_InitStructure; //外部中断相关寄存器结构体变量
  39. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能IO复用功能时钟
  40. GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); //
  41. GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource1); //
  42. GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource2); //
  43. //配置外部中断4相关寄存器
  44. EXTI_InitStructure.EXTI_Line = EXTI_Line0|EXTI_Line1|EXTI_Line2;
  45. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  46. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  47. EXTI_Init(&EXTI_InitStructure);
  48. //中断通道使能
  49. NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//使能外部中断通道0
  50. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  51. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  52. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  53. NVIC_Init(&NVIC_InitStructure);
  54. //中断通道使能
  55. NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//使能外部中断通道1
  56. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  57. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  58. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  59. NVIC_Init(&NVIC_InitStructure);
  60. //中断通道使能
  61. NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//使能外部中断通道2
  62. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //设置抢占优先级2
  63. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//设置响应优先级2
  64. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  65. NVIC_Init(&NVIC_InitStructure);
  66. }
  67. void EXTI0_IRQHandler(void)
  68. {
  69. int i;
  70. for(i=0;i<8;i++)
  71. {
  72. GPIOC->ODR=~(1<<i);//输出低
  73. delay_ms(500);
  74. }
  75. GPIOC->ODR=0xff;
  76. EXTI_ClearITPendingBit(EXTI_Line4);//清除中断挂起标志位
  77. }
  78. void EXTI1_IRQHandler(void)
  79. {
  80. int i;
  81. for(i=8;i>=0;i--)
  82. {
  83. GPIOC->ODR=~(1<<i);//输出低
  84. delay_ms(500);
  85. }
  86. GPIOC->ODR=0xff;
  87. EXTI_ClearITPendingBit(EXTI_Line4);//清除中断挂起标志位
  88. }

  1. 运行效果:

    图片

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/493766
推荐阅读
相关标签
  

闽ICP备14008679号