[其他ST产品] STM32串口发送接收数据

[复制链接]
1558|36
 楼主| 在水一方00 发表于 2023-9-24 00:48 | 显示全部楼层
 楼主| 在水一方00 发表于 2023-9-24 00:49 | 显示全部楼层
led.h
#include "stm32f10x.h"
void Led_init(void);

 楼主| 在水一方00 发表于 2023-9-24 00:49 | 显示全部楼层
led.c
  1. #include "stm32f10x.h"
  2. #include "led.h"

  3. void Led_init(void)
  4. {
  5.         GPIO_InitTypeDef Led_init;
  6.        
  7.         //1.ʹÄÜAPB2µÄʱÖÓGPIO
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  9.        
  10.         //2.½á¹¹ÌåÅäÖÃ
  11.         Led_init.GPIO_Mode         = GPIO_Mode_Out_PP;
  12.         Led_init.GPIO_Pin          = GPIO_Pin_13;
  13.         Led_init.GPIO_Speed = GPIO_Speed_10MHz;
  14.        
  15.         GPIO_Init(GPIOC, &Led_init);
  16. }

 楼主| 在水一方00 发表于 2023-9-24 00:49 | 显示全部楼层
usart.h
#include "stm32f10x.h"
#include <stdio.h>

void usart_init(void);
void usartSendByte(USART_TypeDef* USARTx, uint16_t Data);
void usartSendStr(USART_TypeDef* USARTx,char *str);

 楼主| 在水一方00 发表于 2023-9-24 00:49 | 显示全部楼层
usart.c

  1. #include "usart.h"
  2. #include "stm32f10x.h"

  3. void usart_init(void)
  4. {
  5.         GPIO_InitTypeDef  gpio_init;
  6.         USART_InitTypeDef usartStruct;
  7.         NVIC_InitTypeDef  nvic_initStruct;
  8.        
  9.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  10.        
  11.         //1.ÅäÖÃʱÖÓ£ºGPIO¿ÚµÄʱÖÓ£¬Òý½Å¸´ÓõÄʱÖÓ£¬´®¿ÚµÄʱÖÓ
  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  14.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  15.        
  16.         //2.ÅäÖÃGPIOµÄ½á¹¹Ìå
  17.         //2.1 TX
  18.         gpio_init.GPIO_Mode = GPIO_Mode_AF_PP;
  19.         gpio_init.GPIO_Pin = GPIO_Pin_9;
  20.         gpio_init.GPIO_Speed = GPIO_Speed_10MHz;
  21.        
  22.         GPIO_Init(GPIOA,&gpio_init);
  23.        
  24.         //2.2 RX
  25.         gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  26.         gpio_init.GPIO_Pin = GPIO_Pin_10;
  27.        
  28.         GPIO_Init(GPIOA,&gpio_init);
  29.        
  30.         //3.ÅäÖô®¿ÚµÄ½á¹¹Ìå
  31.         usartStruct.USART_BaudRate = 115200;
  32.         usartStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  33.         usartStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  34.         usartStruct.USART_Parity = USART_Parity_No;
  35.         usartStruct.USART_StopBits = USART_StopBits_1;
  36.         usartStruct.USART_WordLength = USART_WordLength_8b;
  37.        
  38.         USART_Init(USART1,&usartStruct);
  39.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//ÅäÖô®¿ÚÖжÏ
  40.         USART_Cmd(USART1, ENABLE );
  41.        
  42.         nvic_initStruct.NVIC_IRQChannel = USART1_IRQn;
  43.         nvic_initStruct.NVIC_IRQChannelPreemptionPriority = 1;
  44.         nvic_initStruct.NVIC_IRQChannelSubPriority = 1;
  45.         nvic_initStruct.NVIC_IRQChannelCmd = ENABLE;
  46.        
  47.         NVIC_Init(&nvic_initStruct);

  48.        
  49. }

  50. //·â×°ÁËһϷ¢ËÍ×Ö·û
  51. void usartSendByte(USART_TypeDef* USARTx, uint16_t Data)
  52. {
  53.         USART_SendData(USARTx,Data);
  54.         while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);

  55. }

  56. //·¢ËÍ×Ö·û´®
  57. void usartSendStr(USART_TypeDef* USARTx,char *str)
  58. {
  59.         uint16_t i = 0;
  60.         do{
  61.                 usartSendByte(USARTx,*(str+i));
  62.                 i++;
  63.         }while(*(str+i) != '\0');

  64.         //ÅжÏÊÇ·ñ·¢ËÍÍê
  65.         while(USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET);
  66. }

  67. int fputc(int ch,FILE *f)
  68. {
  69.         USART_SendData(USART1,(uint8_t)ch);
  70.         while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
  71.        
  72.         return (ch);
  73. }

  74. int fgetc(FILE *f)
  75. {
  76.         while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
  77.        
  78.         return (int) USART_ReceiveData(USART1);
  79. }

 楼主| 在水一方00 发表于 2023-9-24 00:50 | 显示全部楼层
main.c

  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "relay.h"
  4. #include "shake.h"
  5. #include "exti.h"
  6. #include "usart.h"
  7. #include "stdio.h"

  8. void delay(uint16_t time)
  9. {
  10.         uint16_t i =0;
  11.         while(time--){
  12.                 i=12000;
  13.                 while(i--);
  14.         }
  15. }

  16. int main()
  17. {
  18.         Led_init();
  19.         Relay_Init();
  20.         Shake_init();
  21.         exti_init();
  22.         usart_init();
  23.        
  24.         //³õʼ»¯Òý½Å
  25.         GPIO_SetBits(GPIOA, GPIO_Pin_3);
  26.         GPIO_SetBits(GPIOC, GPIO_Pin_13);

  27. }

  28. void EXTI1_IRQHandler(void)
  29. {
  30.         if (EXTI_GetITStatus( EXTI_Line1 ) != RESET){// ÅжÏÊÇ·ñ·¢ÉúÖжÏ
  31.                 GPIO_ResetBits(GPIOA, GPIO_Pin_3);
  32.                 usartSendStr(USART1,"Open light success\r\n");
  33.                 delay(1000);
  34.                 GPIO_SetBits(GPIOA, GPIO_Pin_3);
  35.                 usartSendStr(USART1,"Close light success\r\n");
  36.         }

  37.         EXTI_ClearFlag(EXTI_Line1);
  38.        
  39. }

  40. void USART1_IRQHandler(void)
  41. {
  42.         char temp;
  43.        
  44.         if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET){
  45.                
  46.                 temp = USART_ReceiveData(USART1);

  47.                 if(temp == 'o'){
  48.                         GPIO_ResetBits(GPIOC, GPIO_Pin_13);
  49.                         usartSendStr(USART1,"Open LED light success\r\n");
  50.                 }
  51.                
  52.                 if(temp == 'c'){
  53.                         GPIO_SetBits(GPIOC, GPIO_Pin_13);
  54.                         usartSendStr(USART1,"Close LED light success\r\n");
  55.                 }
  56.         }
  57. }
  58.        
 楼主| 在水一方00 发表于 2023-9-24 00:50 | 显示全部楼层
遇到的问题
评论区中小鲸鱼uu私信我了一个问题,就是他串口输出乱码
为什么senddata不能发送int的数字,因为将数字转换成ASCII码输出了,至于ASCII码表百度一下吧
童雨竹 发表于 2024-2-17 08:26 | 显示全部楼层

会使二极管导通
Wordsworth 发表于 2024-2-17 09:29 | 显示全部楼层

对于电力电路来说串联的电阻起阻尼作用
Clyde011 发表于 2024-2-17 10:32 | 显示全部楼层

甚至会造成模块电源的损坏
公羊子丹 发表于 2024-2-17 11:25 | 显示全部楼层

将ESD静电保护二极管并联于电路中
万图 发表于 2024-2-17 12:28 | 显示全部楼层

电阻阻值大小则需根据元器件可承受电流大小而决定
Uriah 发表于 2024-2-17 13:31 | 显示全部楼层

小型电子设备
帛灿灿 发表于 2024-2-17 15:27 | 显示全部楼层

电阻元件的电阻值大小一般与温度,材料,长度,还有横截面积有关
Bblythe 发表于 2024-2-17 16:30 | 显示全部楼层

灌封之前需要使用抽空机进行天然脱泡和真空脱泡预处理
周半梅 发表于 2024-2-17 18:26 | 显示全部楼层

当电压超过二极管的导通电压的时候
Pulitzer 发表于 2024-2-17 19:29 | 显示全部楼层

在低成本控制器内部有时候会没有钳位二极管
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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