stm32亮灯后灯不能灭
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32亮灯后灯不能灭相关的知识,希望对你有一定的参考价值。
参考技术A stm32亮灯后灯不能灭?答案如下:系统代码出错了!正确的操作方法是,首先第一步先点击打开设置按钮,然后帐户管理在页面点击账号安全中心进入即可完成!多实践测试。 参考技术B stm32亮灯后灯不能灭,STM32实现流水灯的亮灭俩种方法 1首先我们都要初始化LED的配置voidLEDInit()GPIO_InitTypeDef GPIO_InitStructure;SystemInit();RCC_APB2Perip... 参考技术C stm32单片机LED灯常亮是可能设置的时间太长。可以通过以下使其熄灭首先实现LED灯的点亮和熄灭,控制连接LED灯的管脚输出高低电平就可以实现。如果电流比较大可以增加三极管驱动电路。10秒定时可以用定时器实现,设置一个1秒的定时器。上电点亮LED灯,并开始计时,10秒时间到熄灭LED就可以了。
STM32基础入门
任务描述
编程实现以下功能:
1.创建CUBMAX工程,并用Keil修改程序,编译后下载到M3,当程序启动时,LED9开始闪烁。(1)
2.使用定时器实现,每过1秒LED1、LED3、LED5、LED7、依次亮起,后灯亮起时,前灯灭。(1)
3.在M3上选择适当引脚连接继电器,继电器控制灯泡。当KEY1键按下,灯泡亮,KEY2按下灯泡灭(1)
4扩展试题
M3模块连接光照传感器,采集到的光照数据通过USART5发送到云平台,使云台出现光照数据。(2)
光明传感器发往物联网网关的帧协议格式如下:
说明 |
START |
ADDR |
CMD |
LEN |
TYPE |
DATA |
CheckSum |
长度 |
1Byte |
2Byte |
1Byte |
1Byte |
1Byte |
2Byte |
1Byte |
值 |
0xDD |
0x0001 |
0x02 |
0x0x09 |
0x06 |
|
|
注:2字节时先发高位。
一、设备
- M3模块1个
- 双联继电器一块
- 灯泡一个
- 物联网王网关一个
- 导线若干
二、任务描述
2.1 创建CUBMAX工程,并用Keil修改程序,编译后下载到M3,当程序启动时,LED9开始闪烁。
生成工程,添加代码
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(LED9_GPIO_Port,LED9_Pin); HAL_Delay(500);
2.2、使用定时器实现,每过1秒LED1、LED3、LED5、LED7、依次亮起,后灯亮起时,前灯灭。
生成代码
/* USER CODE BEGIN 2 */ //启动定时器 if(HAL_TIM_Base_Start_IT(&htim6)!=HAL_OK) { Error_Handler(); } /* USER CODE END 2 */
/* USER CODE BEGIN 4 */ //定时器回调函数 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { //是否 if(TIM6 == htim->Instance) { num = num>>2; if(num == 0) num = 0x80; HAL_GPIO_WritePin(GPIOE,0xff,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOE,num,GPIO_PIN_RESET); } }
2.3、在M3上选择适当引脚连接继电器,继电器控制灯泡。当KEY1键按下,灯泡亮,KEY2按下灯泡灭
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin & GPIO_PIN_13) { //keydown_flag = 1; //count +=1; HAL_Delay(300); HAL_GPIO_WritePin(GPIOE,Relay_Pin,GPIO_PIN_SET); //keydown_flag = 0; } }
//判断引脚PD13是否为高电平 if((~GPIOD->IDR)& GPIO_IDR_IDR13) { //是高电平让引脚PE为低电平,从而使灯泡熄灭 HAL_GPIO_WritePin(GPIOE,Relay_Pin,GPIO_PIN_RESET); }
2.4、扩展试题
3模块连接光照传感器,采集到的光照数据通过USART5发送到云平台,使云台出现光照数据。(2)
光明传感器发往物联网网关的帧协议格式如下:
说明 |
START |
ADDR |
CMD |
LEN |
TYPE |
DATA |
CheckSum |
长度 |
1Byte |
2Byte |
1Byte |
1Byte |
1Byte |
2Byte |
1Byte |
值 |
0xDD |
0x0001 |
0x02 |
0x0x09 |
0x06 |
|
|
注:2字节时先发高位。
//HAL_Delay(1000); //light pushbuf[0]=0xDD; //开头 pushbuf[1]=0x06; //地址位 pushbuf[2]=0x00; pushbuf[3]=0x02; //命令码 0x02RS485,0x01CAN pushbuf[4]=0x09; //长度 pushbuf[5]=0x06; //传感器类型 pushbuf[6]=Get_Voltage()*10>>8; //数据位,高八位 pushbuf[7]=Get_Voltage()*10&0xFF; //第八位 pushbuf[8]=CHK(pushbuf,8); //校验位 HAL_UART_Transmit(&huart5,pushbuf,9,0xffff); }
static uint8_t CHK(const uint8_t *buf, uint8_t len) { uint8_t RX_CHX=0; while(len--) { RX_CHX+= *buf; buf++; } return RX_CHX&=0xff; } uint16_t Get_Voltage(void) { uint16_t voltage; uint16_t adcx=0; HAL_ADC_Start(&hadc1); //启动ADC HAL_ADC_PollForConversion(&hadc1,10); //等待采集完成 adcx = HAL_ADC_GetValue(&hadc1); //获取ADC采集数据 voltage=(adcx*330)/4096; //将采集到的数据转换为电压值 HAL_ADC_Stop(&hadc1); //停止ADC return voltage; }
以上是关于stm32亮灯后灯不能灭的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ4872: [Shoi2017]分手是祝愿 期望DP