使用STM32F030K6串口问题
本帖最后由 yinshaojie 于 2018-5-19 17:14 编辑static void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 19200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
以上为配置文件,USART1可以接收数据但发送数据只能发送一个字节,查看ISR状态寄存器EOBF,TXE,TC寄存器都处于置位状态,不知道是什么问题? send_buf = 0x8e; //Í·Âë
send_buf = 0x8e; //Í·Âë
send_buf = 4; //Êý¾Ý³¤¶È
send_buf = Tension_Notch; //ÀÁ¦µµÎ»
send_buf = Weld_time; //ÈÛ½ÓµµÎ»
TxCheckByte = 0;
for (i = 2;i < (send_buf + 1);i++)
{
TxCheckByte = (TxCheckByte^send_buf);
}
send_buf = TxCheckByte; //УÑéλ
// HAL_UART_Transmit(&huart1,send_buf,6,0xffff);
for (send_len_count = 0;send_len_count < (send_buf + 2);send_len_count++)
{
USART1->TDR = send_buf;
while((USART1->ISR & UART_FLAG_TC)== 0);
}这是发送函数
整理一个报文 然后发出去
直接HAL_UART_Transmit(&huart1,send_buf,6,0xffff)不就可以了吗?
为啥又回到了标准库的搞法呢
二楼正解,只要1句HAL_UART_Transmit()就够了,用HAL库无需关心发送标志位等状态 可以参考【stm32cube中文教程2:uart串口通信,printf输出(HAL_UART_Transmit()】资料 用HAL_UART_Transmit(&huart1,send_buf,6,0xffff)用这个也试了不行,也只能发送一个字节ISR状态寄存器EOBF,TXE,TC寄存器都处于置位 没有ST的人来解答一下吗? 楼主是否开了发送中断? 安 发表于 2018-5-21 15:29
楼主是否开了发送中断?
没有用发送中断,使用查询寄存器方式发送 没有发生过类似的问题,可能是程序的问题,检查一下for循环执行了几次。 最后发现是看门狗开启了但没有配置好看门狗时间引起的
页:
[1]