打印
[其他ST产品]

基于STM32 代码块经验分享

[复制链接]
353|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2023-5-11 10:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HAL
溢出中断

PeriodElapsedCallback
  • **一般用来点亮运行状态指示灯**
  • void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  • {
  •   if(htim == &htim7)
  •   {
  •     static uint16_t cnt;
  •     cnt++;
  •     if(cnt>999)
  •     {
  •       cnt = 0;
  •       HAL_GPIO_TogglePin(D2_GPIO_Port,D2_Pin);
  •     }
  •   }
  • }


复制代码


使用特权

评论回复
沙发
cr315|  楼主 | 2023-5-11 10:08 | 只看该作者
按键
按键–支持一次、多次
**自行布置位置**
#define KEY0_PRES 0
#define KEY1_PRES 1

#define K0 HAL_GPIO_ReadPin(K0_GPIO_Port,K0_Pin)
#define K1 HAL_GPIO_ReadPin(K1_GPIO_Port,K1_Pin)

uint8_t KEY_Scan(uint8_t mode)//0-断按  1-长按
{
    static uint8_t key_up=1;     //按键松开标志
    if(mode==1)key_up=1;    //支持连按
    if(key_up&&(K0==0||K1==0))
    {
        HAL_Delay(10);
        key_up=0;
        if(K0==0)       return KEY0_PRES;
        else if(K1==0)  return KEY1_PRES;      
    }else if(K0==1&&K1==1)key_up=1;
    return 99;   //无按键按下
}

void Key_Proc()
{
  static uint8_t val;
  val = KEY_Scan(0);
  if(val == 0){
  printf("K0\r\n");
  }else if(val == 1){
  printf("K1\r\n");
  }
}
复制代码

HAL串口
串口
main:
需要:include "string.h"
if(Fu)
{   
   printf("%s",(char*)Rb);
   memset(Rb,0,sizeof(Rb));
   Fu=0;
   Rc=0;
}

IRQ:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart==&huart1)
  {
    Rb[Rc] = Tp[0];
    Rc++;
    if(0x0a == Tp[0])
    {
      Fu = 1;
    }
    HAL_UART_Receive_IT(&huart1,(uint8_t *)Tp, Tl);
  }   
}     


.h
#define Rl                          1024          //定义最大接收字节数 200
#define Tl          1
extern uint8_t  Rb[Rl],Rc;      
extern _Bool Fu;                         //接收状态标记      
extern uint8_t Tp[Tl];         

.c
uint8_t  Rb[Rl] = {0},Rc=0;         //数据地址;最大容量
_Bool Fu=0;                         //接收状态标记;实际容量
uint8_t Tp[Tl] = {0};           //接收缓存数组
下面这句放在.c中串口的初始化函数void MX_USARTx_UART_Init(void)的用户编写区域里面:
HAL_UART_Receive_IT(&huart1, (uint8_t *)Tp, Tl);
复制代码

使用特权

评论回复
板凳
cr315|  楼主 | 2023-5-11 10:08 | 只看该作者
HAL重定向
不使用micro-Lib
需要:#include "stdio.h"

#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                 
struct __FILE
{
        int handle;
};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
void _sys_exit(int x)
{
        x = x;
}
#endif
复制代码

HAL 串口1重定向
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);//注意把&huart1改为自己的stm32使用的串口号

        return ch;
}
复制代码

标准库串口
串口
main:
需要:include "string.h"
if(fu)
{
  fu = 0;
  //处理过程
  Rc= 0;
  memset(Rb,0,sizeof(Rb));
}

.c
char Rb[256] = {0};
u8 Rc = 0;
_Bool fu;

.h
extern char Rb[256];
extern u8 Rc;
extern _Bool fu;  
  
IRQ:
void USART1_IRQHandler(void)                        //串口1中断服务程序
{
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
        {
      u8 Res;
      Res = USART_ReceiveData(USART1);        //读取接收到的数据
          Rb[Rc] = USART_ReceiveData(USART1);
          if(Res==0x0a)//帧尾
        {
          fu = 1;
        }
        Rc++;
     }
}
     
复制代码

Common
字符串判断
字符串判断
if(strstr(Rb,""Flag":1"))//判断是否存在子字符串“Flag“:1
else if(strstr(Rb,""Flag":0"))//判断是否存在子字符串“Flag”:0
                                //内部双引号需要转义
复制代码

标准库重定向
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
  
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART2, (uint8_t) ch);

  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
  {}

  return ch;
}
复制代码

使用特权

评论回复
地板
szt1993| | 2023-12-29 11:12 | 只看该作者
HAL重定向确实很实用

使用特权

评论回复
5
帛灿灿| | 2024-3-15 08:11 | 只看该作者

无法提供开关电源所需的脉冲电流

使用特权

评论回复
6
Bblythe| | 2024-3-15 09:14 | 只看该作者

影响控制IC

使用特权

评论回复
7
周半梅| | 2024-3-15 11:10 | 只看该作者

电源内部都有四个电流环路

使用特权

评论回复
8
Pulitzer| | 2024-3-15 12:13 | 只看该作者

作为电路的共同电位参考点

使用特权

评论回复
9
童雨竹| | 2024-3-15 14:09 | 只看该作者

传送直流信号的引线

使用特权

评论回复
10
Wordsworth| | 2024-3-15 15:12 | 只看该作者

Buck(或降压)变换器功率部分布局

使用特权

评论回复
11
Clyde011| | 2024-3-15 16:15 | 只看该作者

减小滤波电容的等效串联电阻(ESR)

使用特权

评论回复
12
公羊子丹| | 2024-3-15 17:08 | 只看该作者

MinUnit 是一个 用 C 语言编写的极其简单的单元测试框架

使用特权

评论回复
13
万图| | 2024-3-15 18:11 | 只看该作者

功率开关和整流器的交流电流环路包含非常高的PWM开关电源典型的梯形电流波形

使用特权

评论回复
14
Uriah| | 2024-3-15 19:14 | 只看该作者

通过电容方式耦合到不同层上邻近的引线上

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1340

主题

3907

帖子

0

粉丝