常用功能再封装代码说明.txt 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. SN_Port模块
  2. 目的是给小家电行业的工程师作为代码参考
  3. 通过一个接口,去除多于的繁琐的io设置和io功能引脚复用功能,功能比较简单和常用。
  4. 目前是第v0.5版本,功能上难免不能面面俱到,没有测试人员测试,如发现问题,可以向本人反馈 SN_FAE_黄泽洪
  5. 最近更新时间:
  6. 2025/5/15 添加了tim1的互补输出逻辑,改了tim3pwm输出时钟设置
  7. 2025/5/28 添加了tim1的互补关闭和开启
  8. 2025/5/28 处理SN_EXIT模块:所有回调的事件都是同一件问题
  9. 2025/5/28 SN_ADC模块:添加了获取mcu VDD值的接口
  10. 感谢唐工帮忙测试代码!
  11. 技术支持: SN_FAE_黄泽洪 微信:18922443100 QQ:3965441749
  12. 免责声明:无版权,可随意传播和篡改,该代码仅供开发参考,如需使用请自行验证本人不担负商业使用上带来的风险。
  13. 每个文件都是单独的,如果用不上的可以去掉,不影响其他的文件.从而节约空间资源。各个模块的io使用,无防冲突功能,请自行检查io是否被多次使用。
  14. SN_Port模块都是基于华大官方STD库,要结合官方STD库一起使用。
  15. SN_Port模块包含的文件列表:
  16. 1.SN_GPIO.c
  17. 接口:
  18. 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工作状态
  19. uint8_t SN_GPIO_PIN_set(GPIO_t* gpiox, uint32_t pin_mask); //设置io输出高电位 (前提是io工作在输出模式)
  20. uint8_t SN_GPIO_PIN_reset(GPIO_t* gpiox, uint32_t pin_mask); //设置io输出低电平 (前提是io工作在输出模式)
  21. uint8_t SN_GPIO_PIN_get(GPIO_t* gpiox, uint32_t pin); //读取io的输入输出电平
  22. uint8_t SN_GPIO_PIN_toggle(GPIO_t* gpiox, uint32_t pin_mask); //反转io输出状体(前提是io工作在输出模式)
  23. void SN_GPIO_Deinit(GPIO_t * GPIOx); //GPIO去初始化
  24. 2.SN_EXIT.c
  25. 接口;
  26. 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); //设置外部触发中断
  27. 3.SN_ADC.c
  28. 接口:
  29. uint8_t SN_ADC_IN_init(uint32_t channel); //初始ADC通道
  30. void SN_ADC_start(void); //开始进行ADC转换,(选择编译模式,不同编译模式有不同用法)
  31. uint16_t SN_ADC_Get(uint32_t channel); //获得对应通道的ADC转换值
  32. float SN_ADC_Get_float(uint32_t list_next); //获得对应通道的ADC信号的电压值
  33. float SN_ADC_MCU_VDD(void); //获取MCU的当前时刻的vdd值
  34. void SN_ADC_Deinit(void); //ADC去初始化
  35. 4.SN_PWM.c
  36. 接口:
  37. uint8_t SN_PWM_TIM3_OUT_init(uint16_t CHANNEL,uint32_t Duty_value); //设置定时器3输出PWM通道
  38. uint8_t SN_PWM_TIM1_OUT_init(uint16_t CHANNEL,uint32_t Duty_value); //设置定时器1输出PWM通道
  39. void SN_PWM_TIM1_OUT_Complementary(uint16_t CHANNEL_N); //设置定时器1的互补互补pwm通道引脚
  40. void SN_PWM_TIMx_CH_Duty(TIM_t *timx,uint32_t TIM_CHANNEL_x ,uint32_t Duty_value); //设置PWM输出占空比
  41. SN_PWM_TIM3_CH_mode(uint8_t mod); //设置定时器3的pwm输出精度@通道相关
  42. void SN_TIM_PWM_Start(TIM_t *timx ,uint8_t TIM_CHANNEL_x); //使能PWM1互补通道输出
  43. void SN_TIM_PWM_Stop(TIM_t *timx,uint8_t TIM_CHANNEL_x); //关闭PWM1互补通道输出
  44. void SN_TIM1_OUT_Bleak(uint8_t IO); //刹车引脚设置
  45. SN_TIM3_PWM_Deinit() //去初始化
  46. SN_TIM1_PWM_Deinit() //去初始化
  47. 5.SN_TIM3_INT.c
  48. 接口:
  49. uint8_t SN_TIM3_CALL_set(uint16_t TIM_ARR_VALUE ,uint8_t OPM_WORK ,void(*call_fun)(void) ,uint32_t NVIC_PRIO_x); //设置定时器中断任务
  50. SN_TIM3_Deinit() //去初始化
  51. 6.SN_TIM1_INT.c
  52. 接口:
  53. uint8_t SN_TIM1_CALL_set(uint16_t TIM_ARR_VALUE ,uint8_t OPM_WORK ,void(*call_fun)(void) ,uint32_t NVIC_PRIO_x); //设置定时器中断任务
  54. SN_TIM1_Deinit() //去初始化
  55. 7.SN_UART.c
  56. 接口: (添加奇偶校验处理,添加帧错误处理中断)
  57. 已经实现printf()
  58. void SN_UART_init(UART_t *uartx,uint32_t baudrate,uint8_t RX_IO,uint8_t TX_IO); //UARTx初始化
  59. void SN_UART_TX_BULL( UART_t *uartx,uint8_t * BULL , uint16_t BULL_LEN); //发送数组数据
  60. void SN_UART_RX_BULL_set( UART_t *uartx, uint8_t * BULL ,uint16_t BULL_LEN, uint16_t NVIC_PRIO_x); //启动中断接收(后台接收),并设置接收的数组,和大小
  61. void SN_UART_RX_CALL( UART_t *uartx,void (*UART1_CALL_FUN)(void),uint16_t NVIC_PRIO_x ); //使用自定义接收函数
  62. void SN_UART_Deinit(UART_t *uartx); //串口的去初始化
  63. void SN_UART_ORE_CALL(UART_t *uartx , void (*UART_CALL_FUN)(void)); //设置ORE处理函数
  64. 8.SN_FLASH.c
  65. 接口:
  66. void SN_FLASH_ReadE(uint32_t flash_add, uint8_t* date, uint16_t len); //读出数据
  67. uint8_t SN_FLASH_Write_PAGE(uint8_t PAGE_NUM,uint8_t * data1 , uint16_t len); //按扇区写入数据
  68. void SN_MUC_UID(uint32_t UID[3]); //读出MCU的UID
  69. 9.SN_RCC.c
  70. 接口:
  71. void SN_SYSCLK_set(uint32_t SYSCLK_from); //设置系统时钟
  72. void SN_CLK_MOC(uint32_t PIN_X , uint32_t RCC_MCO_SRC, uint32_t RCC_MCO_DIV_x); //设置设置源输出
  73. 10.SN_SPI.c
  74. 接口: (添加中断后台发送处理)
  75. 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
  76. void SN_SPI_MASTER_init(uint32_t SPI_DIV, uint8_t SPI_MODE_X , uint8_t SPI_MSB_OR_LSB ); //SPI外设设置并且启动
  77. void SN_SPI_IO_SOF_cs(uint8_t SPI_SOF_CS_Px); //设置软件片选
  78. void SN_SPI_TX_RX(uint8_t * send_data ,uint8_t * read_data ,uint16_t len); //SPI发送接收
  79. void SN_SPI_TX(uint8_t * send_data ,uint16_t len); //SPI发送数据
  80. void SN_SPI_RX(uint8_t * read_data ,uint16_t len); //SPI接收数据
  81. SN_SPI_Deinit() ; //SPI去初始化
  82. 11.SN_DDQ.c
  83. 接口: (添加stop调度)
  84. void SN_DDQ_init(void); //调度器模块初始化
  85. void SN_DDQ_TASK_ADD( SN_DDQ_TASK_t * MY_TASK ); //添加任务
  86. void SN_DDQ_RUN(void); //调度器运行
  87. 12.i2c_bsp.c (该接口是华大官方例程的模拟iic,标准100k通信,48MHZ ,使用不同的系统时钟频率,要用户自己修改模块内部延时函数)
  88. 接口:
  89. void SN_IIC_IO_set(uint8_t SCL_PIN_x ,uint8_t SDA_PIN_x ,uint8_t PULLUP ); //设置iic要使用的通信引脚
  90. void SN_IIC_slave(uint8_t iic_slave_id ); //设置从机id
  91. void SN_IIC_ERROR_call(void (*error_call) (void)); //设置通信错误处理
  92. void bsp_i2c_master_send(uint8_t * g_tx_buffer , uint16_t BUFF_SIZE); //主机发送数据
  93. void bsp_i2c_master_receive(uint8_t * g_rx_buffer,uint16_t BUFF_SIZE); //主机接收数据
  94. 13.SN_STOP.c
  95. 接口:
  96. void SN_STOP_EN(void); //进入休眠
  97. void SN_LPtim_Rouse(uint16_t cnt); //使用定时器唤醒
  98. void SN_Exti_Rouse(void); //使用io唤醒
  99. void SN_LPtim_ARR(uint16_t cnt); //更新定时间
  100. void SN_LPtim_SN_LPtim_Stop(void); //停止lptim唤醒
  101. void SN_LPtim_SN_LPtim_EN(void); //启动lptim唤醒
  102. 14.SN_Comp.c
  103. 接口:
  104. 15.SN_CRC.c
  105. 接口:
  106. 16.SN_CAP_TIM3.c
  107. 接口:
  108. //其他的功能相信大家通过这套接口都对003非常了解了,剩下这些功能请自行实现