STM32F103利用定时器2与串口接收指令控制LED亮度

发布者:快乐奇迹最新更新时间:2019-04-10 来源: eefocus关键字:STM32F103  定时器2  串口接收  指令控制  LED亮度 手机看文章 扫描二维码
随时随地手机看文章

通过串口接收到的数据改变PA8输出的占空比来控制LED小灯的亮度


主函数


char *str_light = "LIGHT:";

unsigned char PWM_BUF = 0;

 

int main(void)

{

PWM_Init();

USART3_TIM2_Init(115200);

delay_init();

while(1)

{

if(RX_SATA == 1)

{

if(strstr(RX_BUF,str_light) != 0)

{

delay_ms(1);

PWM_BUF =(RX_BUF[6]-0x30)*10+(RX_BUF[7]-0x30);

TIM_SetCompare1(TIM1,PWM_BUF);

}

RX_SATA = 0;

count = 0;

memset(RX_BUF,0,strlen(RX_BUF));

}

}

}

配置USART3和TIM2


char RX_BUF[20] = {0};

u8 count = 0;

u8 RX_SATA = 0;// 0表示接受未完成 ;1表示接收完成

 

void USART3_TIM2_Init(u32 bound)

{

NVIC_InitTypeDef NVIC_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;


//开启GPIOB 和 复用功能时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

//开启USART3的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);


//PB10 ->Tx 配置为复用推挽式输出 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);


//PB11 ->Rx 配置为浮空输入

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

//配置串口

USART_InitStructure.USART_BaudRate = bound;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

USART_Init(USART3, &USART_InitStructure);

 

USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//配置串口接收为中断模式


 

NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);


USART_Cmd(USART3,ENABLE);


USART_GetFlagStatus(USART3,USART_FLAG_TC);//防止第一个字符被吞


//使能定时器2的时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);


 

TIM_TimeBaseStructure.TIM_Period = (100-1);//ARR

TIM_TimeBaseStructure.TIM_Prescaler = (7200-1);//PSC

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);

 

//使能定时器2的中断

TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);


//配置定时器2的中断优先等级

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

 

//使能定时器2

TIM_Cmd(TIM2,DISABLE);


}

void USART3_IRQHandler(void)

{

USART_ClearFlag(USART3,USART_FLAG_RXNE);

RX_BUF[count] = USART_ReceiveData(USART3);

count++;

TIM_SetCounter(TIM2,0);

TIM_Cmd(TIM2,ENABLE);

}

 

void TIM2_IRQHandler(void)

{

TIM_ClearFlag(TIM2,TIM_FLAG_Update);

TIM_Cmd(TIM2,DISABLE);

RX_SATA = 1;

}

配置PWM


void PWM_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;


//初始化PA8管脚为复用推挽式输出


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽式输出

GPIO_Init(GPIOA, &GPIO_InitStructure);

 

//初始化定时器1的时基单元


//使能定时器1的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);



TIM_TimeBaseStructure.TIM_Period = (100-1);//ARR

TIM_TimeBaseStructure.TIM_Prescaler = (72-1);//PSC

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1, & TIM_TimeBaseStructure);

 

//初始化PWM输出配置

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;


TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;


TIM_OCInitStructure.TIM_Pulse = 0;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;

TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Set;

 

TIM_OC1Init(TIM1,&TIM_OCInitStructure);


//使能PWM外设

TIM_CtrlPWMOutputs(TIM1,ENABLE);


//激活CCR寄存器

TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);


//激活ARR寄存器

TIM_ARRPreloadConfig(TIM1,ENABLE);


//使能定时器1

TIM_Cmd(TIM1,ENABLE);


}

关键字:STM32F103  定时器2  串口接收  指令控制  LED亮度 引用地址:STM32F103利用定时器2与串口接收指令控制LED亮度

上一篇:stm32 通过串口控制led灯亮灭 并通过lcd显示led灯的亮灭状态
下一篇:STM32总结一 STM32三种点亮LED灯方式的不同之处

推荐阅读最新更新时间:2024-03-16 16:27

stm32f103c8t6内部flash读写实例
单片机源程序如下: /************************************************************************************ #include stm32f10x.h #include delay.h #include HX711.h #include usart.h #include key.h #include flash_S.h int main(void) { u8 i,t; u8 len; u16 times=0; delay_init(); NVIC_Configu
[单片机]
关于stm32串口不定长数据接收(hal库)的若干问题
使用串口空闲中断和DMA配合时出现的问题: 问题1.串口接收一旦溢出就会丢数据。 例如串口接收满了,稍等几秒再启动新的DMA接收函数HAL_UART_Receive_DMA时,就丢失数据了,而且是再也收不到串口数据。如果接满后马上启动就没这个问题。 看官方示例代码,停止DMA接收后似乎要DeInit后重新初始化Init和启动DMA接收 解答: 当接收DMA关闭后,此时串口还是激活的,若此时串口来数据,无法触发DMA传输,此时产生上溢错误(ORE),由于串口数据寄存器里的数据不能及时转移走,后面来的数据就进不来。一旦出现这种错误后,就不会再触发DMA请求,即使再开启DMA也不行。要恢复正常的话就只有Deinit后再重
[单片机]
关于stm32<font color='red'>串口</font>不定长数据<font color='red'>接收</font>(hal库)的若干问题
KEIL 5下载程序到STM32F103ZET6芯片时的相关设置
1、点击箭头所指的魔术棒打开项目设置,(也可在Project下打开该魔术棒) 2、Device选项卡下选择项目所使用的芯片,右侧是与所选芯片的相关信息(我用的是STM32F103ZET6选择STM32F103ZE即可) 3、Target选项卡下晶振与软件仿真有关,我们是下载到硬件然后调试可以不用设置,下面有ROM和RAM的起始地址和大小,指的都是实际硬件的ROM和RAM的起始地址和大小,默认即可 4、Output选项卡如下,打开Debug调试信息和阅读代码时函数跳转 5、Listing选项卡下将红框中的全部选上,目的是在最后程序链接时记录详细信息(在project.map文件中),英语不太好
[单片机]
基于STM32F103VE单片机实现纯数字式正弦逆变电源的应用方案
本文提出一种高性能全数字式正弦波逆变电源的设计方案。该方案分为前后两级,前级采用推挽升压电路将输入的直流电升压到350V左右的母线电压,后级采用全桥逆变电路,逆变桥输出经滤波器滤波后,用隔离变压器进行电压采样,电流互感器进行电流采样,以形成反馈环节,增加电源输出的稳定性。升压级PWM驱动及逆变级SPWM驱动均由STM32单片机产生,减小了硬件开支。基于上述方案试制的400W样机,具有输出短路保护、过流保护及输入过压保护、欠压保护功能,50Hz输出时频率偏差小于0.05Hz,满载(400W)效率高于87%,电压精度为220V±1%,THD小于1.5%. 逆变电源应用广泛,特别是精密仪器对逆变电源的性能要求更高。高性能逆变电源不仅
[单片机]
基于<font color='red'>STM32F103</font>VE单片机实现纯数字式正弦逆变电源的应用方案
STM32 USART串口DMA接收和发送模式
串口DMA发送: 发送数据的流程: 前台程序中有数据要发送,则需要做如下几件事 1. 在数据发送缓冲区内放好要发送的数据,说明:此数据缓冲区的首地址必须要在DMA初始化的时候写入到DMA配置中去。 2. 将数据缓冲区内要发送的数据字节数赋值给发送DMA通道,(串口发送DMA和串口接收DAM不是同一个DMA通道) 3. 开启DMA,一旦开启,则DMA开始发送数据,说明一下:在KEIL调试好的时候,DMA和调试是不同步的,即不管Keil 是什么状态,DMA总是发送数据。 4. 等待发送完成标志位,即下面的终端服务函数中的第3点设置的标志位。或者根据自己的实际情况来定,是否要一直等待这个标志位,也可以通过状态机的方式来循
[单片机]
STM32 USART<font color='red'>串口</font>DMA<font color='red'>接收</font>和发送模式
STM32F103和STM32F401的ADC多通道采集DMA输出
使用STM32F103和STM32F401CCU6对双轴摇杆(两个电压通道)进行ADC采样并通过DMA读取数值 STM32 ADC(模数转换)工作模式 单次转换模式 In Single Conversion mode, the ADC does one conversion. This mode is started either by setting the ADON bit in the ADC_CR2 register (for a regular channel only) or by an external trigger (for a regular or injected channel), while the
[单片机]
Vishay推出用于高亮度指示牌的照明和控制应用的LED
2013 年 12 月18 日 — 日前,Vishay Intertechnology, Inc.(NYSE 股市代号:VSH)宣布,该公司的光电子事业部推出采用PLCC-2封装的最新产品---VLM.334…,该系列LED能够处理更高的驱动电流,从而提高发光强度。新款VLM.334…系列LED在Vishay的VLM.31…系列基础上进行了大幅改进,可搭配更大尺寸的芯片,能够承受70mA的驱动电流。 VLM.334…LED通过AEC-Q101认证,有大红、红色、橙黄和黄色,可用于各种各样的应用,包括交通信号灯和指示灯、室内外照明、汽车仪表板照明、音视频设备的指示灯和控制灯、LCD开关和功能标识、灯箱广告,以及其他用途的众多
[电源管理]
Vishay推出用于高<font color='red'>亮度</font>指示牌的照明和<font color='red'>控制</font>应用的<font color='red'>LED</font>
NS推出具有温度管理控制功能的高亮度LED驱动器
  美国国家半导体公司 (National Semiconductor Corporation)日前宣布推出一款具有温度管理控制功能的全新LED驱动器,并推出相应的在线设计支持工具。这款型号为LM3424的LED驱动器是美国国家半导体PowerWise 系列高能效系列芯片中一款新品,其特点是可以驱动高亮度的LED,适用于多种不同的室内/户外照明系统以及汽车照明应用。LM3424芯片除了可获得美国国家半导体WEBENCH LED Designer 的设计工具支持之外,还具有称为热能回折的温度管理控制功能。 系统设计工程师只要采用这款芯片,便可轻易快速地设计一组稳定可靠的热能监控系统。   受实际操作环境的影响,LED的内部温度可
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved