TTL只需要两个线就可以完成两个设备之间的双向通信,一个发送电平的I/O称之为TX,与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND),这样两设备就有相同的0V参考电势。
实现电脑通过STM32发送指令来控制红绿小灯的亮灭。
电脑输入"R0"红灯灭,"R1"红灯亮;"B0"蓝灯灭,"B1"蓝灯亮;"G0"绿灯灭,"G1"绿灯亮
注:案例使用STM32F103CT6芯片,KEYSKING教程的开发板套件。开发板接口图如下
在CubeIDE中,设计面板->属性分类->connectivity中有3个USART。
意思为:Universal Synchronous/Asynchronous Receiver & Transmitter 。 通用同步/异步收发器。其中TTL串口就用的是异步通信Asynchronous。因此可以也缩写成UART。
在设计面板中根据开发板说明找到串口TX,即PA2。设置串口通信,根据自身设置的属性在connectivity找到对应的USART并设置节点模式为异步。
我们可以在属性详情看到波特率(Baud Rate)为115200bits/s,意味着每秒可以发送 11520个字节。两个设备要相同的波特率才能正常通信。
因为字节长度(Word Length)有8个比特位bit,发送一个字节数据需要在字节开头和结尾分别增加一个起始位和停止位共10bit
其他属性校验位为NONE,停止位为1.保持默认即可。设置完成后可以在设计界面中看见另一个收/发串口也被默认复制成相同的配置了。同时根据开发板说明找到红绿蓝灯的接口,设置为GPIO_OUTPUT。保存生成新的代码:
其中示例关于:
MX_USART2_UART_Init(); //是系统自动生成的代码,用来初始化UART的
HAL_UART_Receive(huart, pData, Size, Timeout) //UART接收数据,参数串口类型,接收数据的变量地址,接收数据的变量的字节大小,最大延迟时间
HAL_UART_Transmit(huart, pData, Size, Timeout) //UART发送数据
关键代码main函数:
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
/* USER CODE BEGIN 2 */
uint8_t recvDate[2];
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_UART_Receive(&huart2, recvDate, 2, HAL_MAX_DELAY);
HAL_UART_Transmit(&huart2,recvDate,2, 100);
GPIO_PinState pinstate= GPIO_PIN_RESET;
if(recvDate[1] == '1'){
pinstate = GPIO_PIN_SET;
}
//我把红绿蓝的接口标签命名为了redLED,greenLED,blueLED
if(recvDate[0] == 'R'){
HAL_GPIO_WritePin(redLED_GPIO_Port, redLED_Pin, pinstate);
}else if(recvDate[0] == 'B'){
HAL_GPIO_WritePin(blueLED_GPIO_Port,blueLED_Pin, pinstate);
}else if(recvDate[0] == 'G'){
HAL_GPIO_WritePin(greenLED_GPIO_Port,greenLED_Pin, pinstate);
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
将代码build进单片机中。登录开源网址进行调试:波特律动 串口助手