[STM32F1] 第二次数据包就发送不了了

[复制链接]
928|18
 楼主| zyf部长 发表于 2019-4-22 19:09 | 显示全部楼层 |阅读模式
用STM32F103在做串口是能发送一次数据包,第二次数据包就发送不了了
juventus9554 发表于 2019-4-22 19:13 | 显示全部楼层
STM32CubeMX导出的工程?
 楼主| zyf部长 发表于 2019-4-22 19:16 | 显示全部楼层

数据包如下。
void USC512C_SendSetupData1(UART_HandleTypeDef *huart,uint8_t ch, uint16_t IcNum)
{
    uint8_t i;
    uint8_t *da;

    if(ch==1) da = ICDATA11;
    else if(ch==2) da = ICDATA21;
    else da = ICDATA41;

    //Set reset 0 times 2s
    __HAL_UART_DISABLE(huart);
    //__HAL_UART_ENABLE(huart);
    HAL_GPIO_WritePin(PB10_OutPin_GPIO_Port, PB10_OutPin, GPIO_PIN_RESET);
    HAL_TIM_Base_Start_IT(&htim6);
    while(flag2s);        //调试时停在第二次的这儿过不去了。
    flag2s = 1;
    printf(">>> Set IC 2s reset OK ......\r\n");

    //8us高电平
    HAL_GPIO_WritePin(PB10_OutPin_GPIO_Port, PB10_OutPin, GPIO_PIN_SET);
    delayXus(8);

    //发送Start Code 0x00;
    //__HAL_UART_DISABLE(huart);
    __HAL_UART_ENABLE(huart);
    HAL_UART_Transmit(huart,(uint8_t*)DATA0,1,0xff);
    //等待发送完毕
    while(__HAL_UART_GET_FLAG(huart,UART_FLAG_TC)!=SET);
    printf(">>> Set IC send Start Code 0x00 OK ......\r\n");

    //send Heigh "W"  W>176us;
    __HAL_UART_DISABLE(huart);
    //__HAL_UART_ENABLE(&huart3);
    HAL_GPIO_WritePin(PB10_OutPin_GPIO_Port, PB10_OutPin, GPIO_PIN_SET);
    delayXus(176);
    printf(">>> Set IC 'W' OK ......\r\n");

    for(i=0; i<IcNum; i++)
    {
        //发送11位数据
        //__HAL_UART_DISABLE(&huart3);
        __HAL_UART_ENABLE(huart);
        HAL_UART_Transmit(huart,(uint8_t*)da,11,0xff);
        //等待发送完毕
        while(__HAL_UART_GET_FLAG(huart,UART_FLAG_TC)!=SET);

        //send Heigh "W"  W>176us;
        __HAL_UART_DISABLE(huart);
        //__HAL_UART_ENABLE(huart);
        HAL_GPIO_WritePin(PB10_OutPin_GPIO_Port, PB10_OutPin, GPIO_PIN_SET);
        delayXus(176);

    }
    printf(">>> IC data updata1 OK ......\r\n");
}

主函数调用如下:
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_USART3_UART_Init();
  MX_TIM3_Init();
  MX_TIM2_Init();
  MX_TIM6_Init();
  MX_TIM7_Init();
  MX_USART1_UART_Init();

  /* Initialize interrupts */
  MX_NVIC_Init();

  /* USER CODE BEGIN 2 */
        BSP_Data_Init();
        
        USC512C_SendSetupData1(&huart3,2, 100);          //第一个可以发送。


        USC512C_SendSetupData2(&huart3,2, 100);         //第二个就发送不了了。除了数据不一样,其他都与第一个一样。

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */


  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}


调试的时候在发送函数的定时器处,红色标记的地方,过不去了。
stly 发表于 2019-4-22 19:20 | 显示全部楼层

debug一下看看,应该在你那个发送数据包的函数里面的问题。
llljh 发表于 2019-4-22 19:22 | 显示全部楼层
测试的IO信号是否正常?
dingy 发表于 2019-4-22 19:25 | 显示全部楼层

楼主是不是程序没有配置好
pengf 发表于 2019-4-22 19:30 | 显示全部楼层
串口对方能够接收数据?
renyaq 发表于 2019-4-22 19:34 | 显示全部楼层
串口发送程序一般都能实现。
supernan 发表于 2019-4-22 19:37 | 显示全部楼层

应该是有寄存器的读取。
xxrs 发表于 2019-4-22 19:40 | 显示全部楼层
串口的实现就是一个配置程序,怎么还能第二次执行不了。
 楼主| zyf部长 发表于 2019-4-22 19:43 | 显示全部楼层

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦
wowu 发表于 2019-5-10 10:50 | 显示全部楼层
贴上代码看看
xiaoqizi 发表于 2019-5-10 10:52 | 显示全部楼层
有的标志位没有清除吧
木木guainv 发表于 2019-5-10 10:58 | 显示全部楼层
也有可能没有设置寄存器
coshi 发表于 2019-5-22 13:18 | 显示全部楼层
楼主检查过相应的标志位吗
gwsan 发表于 2019-5-23 10:42 | 显示全部楼层
大不了就重新初始化
nawu 发表于 2019-5-23 11:13 | 显示全部楼层
实在找不到原因的话 就每次发送完就初始化一下
qcliu 发表于 2019-5-23 11:15 | 显示全部楼层
感觉楼上说的挺好  我就是这么干的
tfqi 发表于 2019-5-23 11:17 | 显示全部楼层
qcliu 发表于 2019-5-23 11:15
感觉楼上说的挺好  我就是这么干的

不过要是能找到问题就最好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部