標(biāo)題:
stm32寄存器串口pwm控制呼吸燈最終版源碼
[打印本頁(yè)]
作者:
5552p
時(shí)間:
2018-7-31 23:02
標(biāo)題:
stm32寄存器串口pwm控制呼吸燈最終版源碼
本次問(wèn)題在于開始編程時(shí)候根本沒想好該怎么實(shí)現(xiàn)師兄的要求1:一個(gè)燈能亮or滅 2:實(shí)現(xiàn)PWM功能 3:能暫停and繼續(xù)
記住老師說(shuō)的話,編程一定要構(gòu)思好才動(dòng)手,而且本次放棄的太早,考驗(yàn)的就是你的編程能力
單片機(jī)源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "timer.h"
u8 data=1;
u16 num=1;
//函數(shù)名:main(void).
//功能:初始化各類函數(shù),在死循環(huán)內(nèi)執(zhí)行相應(yīng)命令
//輸入?yún)?shù):data,來(lái)自USART_RX_BUF[0]
//返回值:NULL
//時(shí)間:2018-7-27
int main(void)
{
u8 t;
u8 len;
Stm32_Clock_Init(336,8,2,7);//設(shè)置時(shí)鐘,168Mhz
delay_init(168); //延時(shí)初始化
uart_init(84,115200); //串口初始化為115200
LED_Init(); //初始化與LED連接的硬件接口
TIM14_PWM_Init(500-1,84-1); //2Khz的PWM.84M/84=1Mhz的計(jì)數(shù)頻率,重裝載值500
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數(shù)據(jù)長(zhǎng)度
printf("\r\n您發(fā)送的消息為:\r\n");
for(t=0;t<len;t++)
{
USART1->DR=USART_RX_BUF[t];
while((USART1->SR&0X40)==0);//等待發(fā)送結(jié)束
}
printf("\r\n\r\n");//插入換行
USART_RX_STA=0;
data=USART_RX_BUF[0];
switch(data)
{
case 0x30: num=0; break;//按0 關(guān)
case 0x31: num=1; break;//按1 開
case 0x32: num=100; break;//按2 呼吸燈1
case 0x33: num=200; break;//按3 呼吸燈2
case 0x34: num=300; break;//按4 呼吸燈3
case 0x35: num=5; break;//按5 暫停
default:printf("\r\n 錯(cuò)誤 \r\n");
}
}
My_mainpwm(num);
}
}
//函數(shù)名:My_mainpwm(u16 num).
//功能:根據(jù)上一次輸入data對(duì)應(yīng)num選擇相應(yīng)LED0_PWM_VAL.
//輸入?yún)?shù):num(對(duì)應(yīng)LED0_PWM_VAL).
//輸出參數(shù):NULL
//返回值:NULL
//時(shí)間:2018-7-27
void My_mainpwm(u16 num)
{
static u16 led0pwmval=0;
static u8 dir=1;
switch(num)
{
case 0:LED0_PWM_VAL=0; break;//關(guān)燈
case 1:LED0_PWM_VAL=400;break;//開燈
case 100:
case 200:
case 300:
delay_ms(10);
//TIM14->CR1|=1<<0; //使能定時(shí)器
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>num)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval; //開始或繼續(xù)呼吸燈
break;
case 5: break;
}
}
復(fù)制代碼
所有資料51hei提供下載:
寄存器串口控制呼吸燈最終版.rar
(133.77 KB, 下載次數(shù): 73)
2018-7-31 23:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
lemonluilui
時(shí)間:
2019-7-13 18:55
請(qǐng)問(wèn)一下case 0x30 是怎么實(shí)現(xiàn)的呢 USART_RX_STA里面的數(shù)據(jù)是按照十六進(jìn)制存儲(chǔ)的嗎
作者:
xiaozhong1314
時(shí)間:
2019-7-13 22:15
if(USART_RX_STA&0x8000) 想問(wèn)一下這個(gè)什么意思啊
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1