完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/****
本例子简单 就是利用tiM1输出比较功能 “输出”来输出占空比可调的 信号,可以输出占空比可调的PWM 波 注意是 串口的 波特率 和输出信号 怎么计算 */ /* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */ #include "stm8s105c4.h" #include "stdio.h" #include "stm8s.h" /****************************************/ #define UNIQUE_ID_START_ADDR 0X48CD unsigned char i; int temp; char t; unsigned char *pid; //此部分是测试单片机 唯一ID 使用 与测试IO 频率占空比没有钉钉关系 //如果注释掉 TIM1 部分代码是没有关系的 串口就会输出 ID 值 /********************************************/ //TIM1 控制整流电机 转速 //PC1 输出占空比75%的PWM //PC2 输出占空比50%的PWM _Bool in1 @PB_ODR:3; _Bool in2 @PB_ODR:4; _Bool in3 @PB_ODR:5; _Bool in4 @PB_ODR:6; void delay(unsigned int t) { while(t--); } void tim1_oc1_init(void) { //2000.000/X = 16000 X=125HZ TIM1_ARRH = 0X3E; TIM1_ARRL = 0X80; //占空比计算 12000/16000 = 75% TIM1_CCR1H = 0X2E; TIM1_CCR1L = 0X30; //模式选择 //通道配置输出 //110 PWM模式1 向上计数 TIM1_CCMR1 = 0X60; // TIM1_CCER1 = 0X01; // TIM1_OISR = 0X01; } void tim1_oc2_init(void) { //2000.000/X = 8000 X=250HZ TIM1_ARRH = 0X1F; TIM1_ARRL = 0X40; //占空比计算 8000/16000 = 50% TIM1_CCR1H = 0X2E; TIM1_CCR1L = 0X30; //模式选择 //通道配置输出 //110 PWM模式1 向上计数 TIM1_CCMR1 = 0X60; // TIM1_CCER1 = 0X11; // TIM1_CR1 = 0X01; TIM1_OISR = 0X01; // TIM1_BKR = 0X80; } void uart2_init(void) { UART2_CR1 = 0X00; //控制寄存器 1 //R8存放接收到的字第9位 //T8 存放发送字的第9位 //UARTD=0 使能 //WAIE 被空闲总线唤醒 //PCEN UART 模式=0 奇偶校验 禁止 //PS 奇偶校验选择 这里不选择 //PIEN 校验中断 = 0 禁止 UART2_CR2 = 0X0C;//0000 1100 //发送接收使能 UART2_CR3 = 0X20; //0010 //00 1个停止位 //01 保留 //10 2个停止位 // 11 1.5 个停止位 UART2_BRR2 = 0X00; //2MHZ 下9600 UART2_BRR1 = 0X0D; //2000000/9600 = 208 =D0 =00D0 //设置波特率 //这个波特率设置很有意思 //不是直接赋值 而是 达到的 16进制数 // 中间两位赋值 给BRR1 两边2为赋值给BRR2 } char putchar(char c) { UART2_DR = c; while(!(UART2_SR & 0X80)); return c; } char getchar(void) { char c; while(!(UART2_SR & 0X20)); return (UART2_DR); } void gpio_init(void) { PE_ODR = 0XFF; PE_DDR = 0XFF; PE_CR1 = 0XFF; PE_CR2 = 0X00; } main() { //gpio_init(); uart2_init(); //串口2 初始化 printf("系统初始化完成 !rn"); //printf("芯片96位唯一ID为:rn"); //pid = (unsigned char *)UNIQUE_ID_START_ADDR; /********************************** for(i=0;i<12;i++) { temp = (int)*(pid++); printf("0x%0.2xrn",temp); } **********************************/ tim1_oc2_init(); tim1_oc2_init(); while (1) { /************************************** printf("输入:(a,LED亮 b,LED灭)rn"); t = getchar(); switch(t) { case 'a': printf("LED 亮rn"); PE_ODR = 0X00; break; case 'b': printf("LED 灭rn"); PE_ODR = 0B00110011; break; default: printf("输入错误!rn"); break; } *****************************************/ ; } } |
|
相关推荐
|
|
1049 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1017 浏览 2 评论
2123 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1219 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1639 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 13:25 , Processed in 0.667738 second(s), Total 66, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号