32單片機RS485 通訊
51hei.png (107.02 KB, 下載次數: 20)
下載附件
2023-9-19 19:39 上傳
51hei.png (51.6 KB, 下載次數: 20)
下載附件
2023-9-19 19:39 上傳
51hei.png (24.97 KB, 下載次數: 21)
下載附件
2023-9-19 19:40 上傳
- #include "./SYSTEM/sys/sys.h"
- #include "./SYSTEM/usart/usart.h"
- #include "./SYSTEM/delay/delay.h"
- #include "./USMART/usmart.h"
- #include "./BSP/LED/led.h"
- #include "./BSP/LCD/lcd.h"
- #include "./BSP/KEY/key.h"
- #include "./BSP/RS485/rs485.h"
- int main(void)
- {
- uint8_t key;
- uint8_t i = 0, t = 0;
- uint8_t cnt = 0;
- uint8_t rs485buf[5];
- HAL_Init(); /* 初始化HAL庫 */
- sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */
- delay_init(72); /* 延時初始化 */
- usart_init(115200); /* 串口初始化為115200 */
- usmart_dev.init(72); /* 初始化USMART */
- led_init(); /* 初始化LED */
- lcd_init(); /* 初始化LCD */
- key_init(); /* 初始化按鍵 */
- rs485_init(9600); /* 初始化RS485 */
- lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
- lcd_show_string(30, 70, 200, 16, 16, "RS485 TEST", RED);
- lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
- lcd_show_string(30, 110, 200, 16, 16, "KEY0:Send", RED); /* 顯示提示信息 */
- lcd_show_string(30, 130, 200, 16, 16, "Count:", RED); /* 顯示當前計數值 */
- lcd_show_string(30, 150, 200, 16, 16, "Send Data:", RED); /* 提示發送的數據 */
- lcd_show_string(30, 190, 200, 16, 16, "Receive Data:", RED);/* 提示接收到的數據 */
- while (1)
- {
- key = key_scan(0);
- if (key == KEY0_PRES) /* KEY0按下,發送一次數據 */
- {
- for (i = 0; i < 5; i++)
- {
- rs485buf[i] = cnt + i; /* 填充發送緩沖區 */
- lcd_show_xnum(30 + i * 32, 170, rs485buf[i], 3, 16, 0X80, BLUE); /* 顯示數據 */
- }
- rs485_send_data(rs485buf, 5); /* 發送5個字節 */
- }
- rs485_receive_data(rs485buf, &key);
- if (key) /* 接收到有數據 */
- {
- if (key > 5) key = 5; /* 最大是5個數據. */
- for (i = 0; i < key; i++)
- {
- lcd_show_xnum(30 + i * 32, 210, rs485buf[i], 3, 16, 0X80, BLUE); /* 顯示數據 */
- }
- }
- t++;
- delay_ms(10);
- if (t == 20)
- {
- LED0_TOGGLE(); /* LED0閃爍, 提示系統正在運行 */
- t = 0;
- cnt++;
- lcd_show_xnum(30 + 48, 130, cnt, 3, 16, 0X80, BLUE); /* 顯示數據 */
- }
- }
- }
復制代碼
|