OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2712|回复: 2

串口问题,新手求助,谢谢了!

[复制链接]

9

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2018-8-8
在线时间
50 小时
发表于 2019-11-20 14:42:54 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 走投无路的卡卡 于 2019-11-20 14:46 编辑
  1. ——————————————main.c——————————————
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "led.h"
  5. #include "key.h"
  6. #include "uart.h"

  7. int main(void)
  8. {   
  9.     HAL_Init();                     
  10.     Stm32_Clock_Init(360,25,2,8);  
  11.      delay_init(180);
  12.      led_init();
  13.     key_init();
  14.     uart_init(115200);
  15.         
  16.     UART_HandleTypeDef uart_handler;
  17.     u16 size;               
  18.         
  19.         while(1)
  20.         {
  21.         if(uart_sta&0x8000)
  22.         {
  23.                 size=(uart_sta|0x3fff);
  24.                 printf("Äú·¢Ë͵ÄÏûϢΪ£º");
  25.                 HAL_UART_Transmit(&uart_handler,(u8 *)data,size,1000);
  26.                 while(__HAL_UART_GET_FLAG(&uart_handler,UART_FLAG_TC)!=SET);
  27.                 uart_sta=0;
  28.         }
  29.                
  30.         }

  31. }

  32. ————————————————————————————————uart.c————————————————————————

  33. #include "uart.h"

  34. #if 1
  35. #pragma import(__use_no_semihosting)            
  36. struct __FILE
  37. {
  38.         int handle;
  39. };

  40. FILE __stdout;      
  41. void _sys_exit(int x)
  42. {
  43.         x = x;
  44. }
  45. int fputc(int ch, FILE *f)
  46. {         
  47.         while((USART1->SR&0X40)==0);
  48.         USART1->DR = (u8) ch;      
  49.         return ch;
  50. }
  51. #endif

  52. UART_HandleTypeDef uart_handler;
  53. GPIO_InitTypeDef gpio_initure;
  54. u16 uart_sta=0;
  55. u8 data[length];
  56. u8 rxbuff[1];
  57.         
  58. void uart_init(u32 rate)
  59. {
  60.         uart_handler.Instance=USART1;
  61.         uart_handler.Init.BaudRate=rate;
  62.         uart_handler.Init.Mode=UART_MODE_TX_RX;
  63.         uart_handler.Init.StopBits=UART_STOPBITS_1;
  64.         uart_handler.Init.WordLength=UART_WORDLENGTH_8B;
  65.         uart_handler.Init.Parity=UART_PARITY_NONE;
  66.         uart_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;
  67.                
  68.         HAL_UART_Init(&uart_handler);
  69.         HAL_UART_Receive_IT(&uart_handler,(u8 *)rxbuff,1);  
  70.         __HAL_UART_ENABLE_IT(huart, UART_IT_RXNE);
  71.         //__HAL_UART_ENABLE_IT(&uart_handler,UART_IT_RXNE);

  72. }


  73. void HAL_UART_MspInit(UART_HandleTypeDef *huart)
  74. {
  75.         __HAL_RCC_GPIOA_CLK_ENABLE();
  76.         __HAL_RCC_USART1_CLK_ENABLE();
  77.         
  78.         gpio_initure.Pin=GPIO_PIN_9|GPIO_PIN_10;
  79.         gpio_initure.Mode=GPIO_MODE_AF_PP;
  80.         gpio_initure.Pull=GPIO_PULLUP;
  81.         gpio_initure.Speed=GPIO_SPEED_FREQ_HIGH;
  82.         gpio_initure.Alternate=GPIO_AF7_USART1;
  83.         
  84.         HAL_GPIO_Init(GPIOA,&gpio_initure);
  85.         
  86.         HAL_NVIC_EnableIRQ(USART1_IRQn);
  87.         HAL_NVIC_SetPriority(USART1_IRQn,3,3);
  88.         
  89. }
  90. void UART_IRQ(void)
  91. {
  92.         HAL_UART_IRQHandler(&uart_handler);
  93.         HAL_UART_Receive_IT(&uart_handler,(u8 *)rxbuff,1);  

  94. }


  95. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  96. {
  97.         if((uart_sta&0x8000)==0)                                
  98.         {
  99.                 if(uart_sta&0x4000)                             //receive 0x0d
  100.                 {
  101.                         if(rxbuff[0]==0x0a) uart_sta|=0x8000;
  102.                         else uart_sta=0;                                                //error
  103.                 }
  104.                 else
  105.                 {
  106.                         if(rxbuff[0]==0x0d) uart_sta|=0x4000;
  107.                         else
  108.                         {                        
  109.                                         data[uart_sta&0x3fff]=rxbuff[0];
  110.                                   uart_sta++;
  111.                         }
  112.                 }
  113.                
  114.                         
  115.         }


  116. }


复制代码


————————————————————————————————————问题描述——————————————————————————————
代码无bug,跟原子哥的代码对比也相差不大,但是在串口调试助手上发送数据时,得不到接收数据,求大神帮我看看我代码的问题出在哪。在线等,谢谢了。。。。





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
256
金钱
256
注册时间
2018-8-8
在线时间
50 小时
 楼主| 发表于 2019-11-20 14:42:55 | 显示全部楼层
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-20 16:09:58 | 显示全部楼层
帮顶      
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-15 13:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表