基于STM32G070RB的七彩星空燈教程(四)
我們今天用手機(jī)通過(guò)藍(lán)牙來(lái)控制WS2812的模式和速度調(diào)節(jié)。
本文引用地址:http://cafeforensic.com/article/202205/434256.htm相信大家在之前的學(xué)習(xí)中已經(jīng)學(xué)習(xí)了藍(lán)牙模塊的用法,今天我們就來(lái)實(shí)戰(zhàn)下。先打開(kāi)STM32CubeMX 配置我們要用到串口(我這里以串口2 為例,大家根據(jù)自己的喜好)因?yàn)樗{(lán)牙模塊默認(rèn)是9600Bits/s 所以我們配置時(shí)要與藍(lán)牙的波特率一致。如下圖所示。
同時(shí)我們使能下 串口的收發(fā)中斷。
這樣串口就配置好了 點(diǎn)擊生成代碼。打開(kāi)工程
我們可以看到串口2的初始化程序。
好的 我們添加,定義一個(gè)字符的數(shù)據(jù)接收。
添加以下代碼 打開(kāi)串口接收中斷。
重寫(xiě)串口接收中斷回調(diào)函數(shù), 代碼如下
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(Buffer>='A' && Buffer <='H') { Mode_Led = Buffer; printf("燈光模式:%c",Mode_Led); } if(Buffer == 'I') { Mode_wait +=10; if(Mode_wait==500) Mode_wait=490; printf("燈光速度:%d",500-Mode_wait); } if(Buffer == 'J') { Mode_wait -=10; if(Mode_wait==40) Mode_wait=50; printf("燈光速度:%d",500-Mode_wait); } HAL_UART_Receive_IT(&huart2,&Buffer, 1); }
這里的printf對(duì)串口發(fā)送函數(shù)進(jìn)行了重定義,方法如下
int fputc(int c, FILE *stream) //重寫(xiě)fputc函數(shù) { /* huart1是工具生成代碼定義的UART1結(jié)構(gòu)體, 如果以后要使用其他串口打印,只需要把這個(gè)結(jié)構(gòu)體改成其他UART結(jié)構(gòu)體。 */ HAL_UART_Transmit(&huart2, (unsigned char *)&c, 1, 1000); return 1; }
將代碼復(fù)制到
/* USER CODE BEGIN 0 */ /* USER CODE END 0 */
之間。
接下來(lái)點(diǎn)擊Options for Target 把Use MicroLIB 打上對(duì)勾
就完成了對(duì)串口發(fā)送函數(shù)的重寫(xiě)。就可以正常的使用printf 函數(shù)了。我們可以通過(guò)輸出一定的信息,顯示出當(dāng)前的狀態(tài)。
我們連上藍(lán)牙模塊 發(fā)送模式對(duì)應(yīng)的字符,就可以實(shí)現(xiàn)模式的切換,以及實(shí)現(xiàn)調(diào)速。
到這里 我們就實(shí)現(xiàn)了 使用藍(lán)牙控制的效果。
評(píng)論