CIU32F003小家电接口调试代码

电子说

1.4w人已加入

描述

目的是给小家电行业的工程师作为代码参考
通过一个接口,去除多于的繁琐的io设置和io功能引脚复用功能,功能比较简单和常用。
目前是第v0.6版本,功能上难免不能面面俱到,没有测试人员测试

最近更新时间:
2025/5/15  添加了tim1的互补输出逻辑,改了tim3pwm输出时钟设置
2025/5/28  添加了tim1的互补关闭和开启
2025/5/28  处理SN_EXIT模块:所有回调的事件都是同一件问题
2025/5/28  SN_ADC模块:添加了获取mcu VDD值的接口
2025/9/12  修改tim3的4通道,只有八位pwm的输出的硬件设置导致的周期抖动,重新添加另一套更方便的adc接口
2025/9/27  添加小工具系列 - 8位环形消息队列,用于做低功耗软件调度架构


每个文件都是单独的,如果用不上的可以去掉,不影响其他的文件.从而节约空间资源。各个模块的io使用,无防冲突功能,请自行检查io是否被多次使用。

SN_Port模块都是基于华大官方STD库,要结合官方STD库一起使用。


SN_Port模块包含的文件列表:

   1.SN_GPIO.c
                 接口:
                           void SN_GPIO_PIN_init(GPIO_t* gpiox , uint32_t pin_mask , uint32_t GPIO_MODE ,uint32_t GPIO_PULL ,uint32_t output_type); //设置对应的io工作状态
                           uint8_t SN_GPIO_PIN_set(GPIO_t* gpiox, uint32_t pin_mask);                                                                 //设置io输出高电位 (前提是io工作在输出模式)
                           uint8_t SN_GPIO_PIN_reset(GPIO_t* gpiox, uint32_t pin_mask);                                                             //设置io输出低电平 (前提是io工作在输出模式)
                           uint8_t SN_GPIO_PIN_get(GPIO_t* gpiox, uint32_t pin);                                                                    //读取io的输入输出电平
                           uint8_t SN_GPIO_PIN_toggle(GPIO_t* gpiox, uint32_t pin_mask);                                                            //反转io输出状体(前提是io工作在输出模式)
                           void SN_GPIO_Deinit(GPIO_t * GPIOx);                                                                                     //GPIO去初始化
                           
   2.SN_EXIT.c
                接口;
                
                           uint8_t SN_EXIT_set(GPIO_t* gpiox,uint32_t pin_mask,uint32_t pull ,void (*fun) (void),uint32_t EXTI_TRIGGER ,uint32_t NVIC_PRIO_x); //设置外部触发中断
                           
                           
   3.SN_ADC.c / SN_ADC_2.c
                接口:     
                           uint8_t SN_ADC_IN_init(uint32_t channel);   //初始ADC通道
                           void SN_ADC_start(void);                    //开始进行ADC转换,(选择编译模式,不同编译模式有不同用法)
                           uint16_t SN_ADC_Get(uint32_t channel);      //获得对应通道的ADC转换值
                           float SN_ADC_Get_float(uint32_t list_next); //获得对应通道的ADC信号的电压值
                           float  SN_ADC_MCU_VDD(void);                //获取MCU的当前时刻的vdd值
                           void  SN_ADC_Deinit(void);                  //ADC去初始化
                           
                           /*ADC_2模块接口函数:专给单通道调用*/
                           void SN_ADC_II_Init(uint16_t ADC_CH_x);      //初始化ADC通道对应引脚
                           uint32_t  SN_ADC_II_GET(uint32_t  ADC_CH_x); //获取adc通道值
                           uint32_t SN_BGR_VDD(uint32_t adc_val);       //获取mcu的vdd值
                                                   
                           
   4.SN_PWM.c       
                接口:
                           uint8_t SN_PWM_TIM3_OUT_init(uint16_t CHANNEL,uint32_t Duty_value);                //设置定时器3输出PWM通道
                           uint8_t SN_PWM_TIM1_OUT_init(uint16_t CHANNEL,uint32_t Duty_value);                //设置定时器1输出PWM通道
                           void SN_PWM_TIM1_OUT_Complementary(uint16_t CHANNEL_N);                            //设置定时器1的互补互补pwm通道引脚
                           void SN_PWM_TIMx_CH_Duty(TIM_t *timx,uint32_t TIM_CHANNEL_x ,uint32_t Duty_value); //设置PWM输出占空比
                           SN_PWM_TIM3_CH_mode(uint8_t mod);                                                  //设置定时器3的pwm输出精度@通道相关
                           void SN_TIM_PWM_Start(TIM_t *timx ,uint8_t TIM_CHANNEL_x);                             //使能PWM1互补通道输出
                           void SN_TIM_PWM_Stop(TIM_t *timx,uint8_t TIM_CHANNEL_x);                               //关闭PWM1互补通道输出
                           void SN_TIM1_OUT_Bleak(uint8_t IO);                                                    //刹车引脚设置
                           SN_TIM3_PWM_Deinit()                                                                   //去初始化                 
                           SN_TIM1_PWM_Deinit()                                                                   //去初始化
                          
   5.SN_TIM3_INT.c
   
                接口:
                           uint8_t SN_TIM3_CALL_set(uint16_t TIM_ARR_VALUE ,uint8_t OPM_WORK ,void(*call_fun)(void) ,uint32_t NVIC_PRIO_x);  //设置定时器中断任务
                           SN_TIM3_Deinit()                                                                                                  //去初始化
                         
   6.SN_TIM1_INT.c
   
                接口:
                           uint8_t SN_TIM1_CALL_set(uint16_t TIM_ARR_VALUE ,uint8_t OPM_WORK ,void(*call_fun)(void) ,uint32_t NVIC_PRIO_x);  //设置定时器中断任务
                           SN_TIM1_Deinit()                                                                                                  //去初始化


   7.SN_UART.c 
                接口:     (添加奇偶校验处理,添加帧错误处理中断)
                           已经实现printf()
                           void SN_UART_init(UART_t *uartx,uint32_t baudrate,uint8_t RX_IO,uint8_t TX_IO);                    //UARTx初始化
                           void SN_UART_TX_BULL( UART_t *uartx,uint8_t * BULL , uint16_t BULL_LEN);                           //发送数组数据
                           void SN_UART_RX_BULL_set( UART_t *uartx, uint8_t * BULL ,uint16_t BULL_LEN, uint16_t NVIC_PRIO_x); //启动中断接收(后台接收),并设置接收的数组,和大小 
                           void SN_UART_RX_CALL( UART_t *uartx,void (*UART1_CALL_FUN)(void),uint16_t NVIC_PRIO_x );           //使用自定义接收函数
                           void SN_UART_Deinit(UART_t *uartx);                                                                //串口的去初始化
                           void SN_UART_ORE_CALL(UART_t *uartx , void (*UART_CALL_FUN)(void));                                //设置ORE处理函数
                 
   8.SN_FLASH.c    
                接口:    
                           void SN_FLASH_ReadE(uint32_t flash_add, uint8_t* date, uint16_t len);                             //读出数据
                           uint8_t SN_FLASH_Write_PAGE(uint8_t PAGE_NUM,uint8_t * data1 , uint16_t len);                     //按扇区写入数据
                           void SN_MUC_UID(uint32_t UID[3]);                                                                 //读出MCU的UID
                                                                               
   9.SN_RCC.c 
                接口:
                           void  SN_SYSCLK_set(uint32_t SYSCLK_from);                                                //设置系统时钟        
                           void  SN_CLK_MOC(uint32_t PIN_X    , uint32_t  RCC_MCO_SRC, uint32_t  RCC_MCO_DIV_x);        //设置设置源输出
 
 
   10.SN_SPI.c  
                接口:        (添加中断后台发送处理)         
                           void  SN_SPI_IO_set(uint8_t SPI_MOSI_x , uint8_t SPI_MISO_x , uint8_t  SPI_SCK_x,  uint8_t SPI_NSS_x );   //设置SPI的io
                           void  SN_SPI_MASTER_init(uint32_t SPI_DIV, uint8_t SPI_MODE_X , uint8_t SPI_MSB_OR_LSB );                 //SPI外设设置并且启动
                           void  SN_SPI_IO_SOF_cs(uint8_t SPI_SOF_CS_Px);                                                            //设置软件片选 
                           void  SN_SPI_TX_RX(uint8_t * send_data ,uint8_t * read_data ,uint16_t len);                               //SPI发送接收
                           void  SN_SPI_TX(uint8_t * send_data ,uint16_t len);                                                       //SPI发送数据
                           void  SN_SPI_RX(uint8_t * read_data ,uint16_t len);                                                       //SPI接收数据
                           SN_SPI_Deinit() ;                                                                                         //SPI去初始化
       

   11.SN_DDQ.c
                
                接口:     (添加stop调度)
                       
                           void SN_DDQ_init(void);                           //调度器模块初始化
                           void SN_DDQ_TASK_ADD( SN_DDQ_TASK_t * MY_TASK  ); //添加任务
                           void SN_DDQ_RUN(void);                            //调度器运行

   
   
   12.i2c_bsp.c         (该接口是华大官方例程的模拟iic,标准100k通信,48MHZ ,使用不同的系统时钟频率,要用户自己修改模块内部延时函数)
      
                接口:

                       void  SN_IIC_IO_set(uint8_t SCL_PIN_x ,uint8_t SDA_PIN_x ,uint8_t PULLUP ); //设置iic要使用的通信引脚
                       void  SN_IIC_slave(uint8_t iic_slave_id );                                  //设置从机id
                       void  SN_IIC_ERROR_call(void (*error_call) (void));                         //设置通信错误处理
                       void  bsp_i2c_master_send(uint8_t * g_tx_buffer , uint16_t BUFF_SIZE);      //主机发送数据
                       void  bsp_i2c_master_receive(uint8_t * g_rx_buffer,uint16_t BUFF_SIZE);     //主机接收数据

   13.SN_STOP.c
                接口: 
                       void  SN_STOP_EN(void);              //进入休眠
                       void  SN_LPtim_Rouse(uint16_t cnt);  //使用定时器唤醒
                       void  SN_Exti_Rouse(void);           //使用io唤醒
                       void  SN_LPtim_ARR(uint16_t cnt);    //更新定时间
                       void  SN_LPtim_SN_LPtim_Stop(void);  //停止lptim唤醒
                       void  SN_LPtim_SN_LPtim_EN(void);    //启动lptim唤醒
   

来源:csdn

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分