STM8S003F3U6 请求各位大佬支援,但是遇到如下问题。。。这样就一定是这颗芯片的问题吗?
STVD如何生成库文件
STM8 flash 库函数 startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_S
stm 8 flash 在RAM运行代码的问题,是不是库函数有问题 Library call (?sll32_l0_l0_a) from within a
STM 有能替代MCHC912B32CFUE8 / NXP的型号吗?
STM8S的CAN总线使用
STM8L151在使用DAC功能后严重发热
STM8 IIC SLAVE 400K
STM8S 定时器1互补输出pwm
STM8S003F3 NRST电压低,无法开机
我现在要做的是
系统时钟16M;
ADC用了5通道 采样率500Hz,开启一次采样采集100个数据
ADC时钟2分频 2M/2=1M 转换时间48Cycles, 0.48us *5=0.24us
DMA搬移数据
定时器500HZ 2ms触发一次。
/*系统时钟*/
static void CLK_Config(void)
{
/* Select HSE as system clock source */
CLK_SYSCLKSourceSwitchCmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
/*High speed external clock prescaler: 1*/
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);/*16M*/
while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE)
{}
}
/*TIM1*/
static void Timer1_Config()
{
/*
- TIM1CLK = 16 MHz
- TIM1 counter clock = TIM1CLK / TIM1_PRESCALER+1 = 16 MHz/159+1 = 100kHz
*/
/* Time base configuration */ CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);
TIM1_TimeBaseInit(9, TIM1_CounterMode_Up, 199, 0);
}
/*ADC初始化*/
static void ADC_Config(void)
{
/* Enable ADC1 clock */
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, ENABLE);
/* Initialize and configure ADC1
*/
ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_2);
ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_48Cycles);
ADC_SamplingTimeConfig(ADC1, ADC_Group_FastChannels, ADC_SamplingTime_48Cycles);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);
/* Enable ADC1 Channels 7 */
ADC_ChannelCmd(ADC1, ADC_Channel_7, ENABLE); /* connected to 通道5 */
/* Enable ADC1 Channels 8 */
ADC_ChannelCmd(ADC1, ADC_Channel_8, ENABLE); /* connected to 通道4 */
/* Enable ADC1 Channels 9 */
ADC_ChannelCmd(ADC1, ADC_Channel_9, ENABLE); /* connected to 通道3 */
/* Enable ADC1 Channels 10 */
ADC_ChannelCmd(ADC1, ADC_Channel_10, ENABLE); /* connected to 通道2 */
/* Enable ADC1 Channels 24 */
ADC_ChannelCmd(ADC1, ADC_Channel_24, ENABLE); /* connected to 通道1 */
}
#define BUFFER_SIZE ((uint8_t) SERSOR_MUN)
#define BUFFER_ADDRESS ((uint16_t)(&Buffer))
/*DMA*/
static void DMA_Config(void)
{
/* Enable DMA1 clock */
CLK_PeripheralClockConfig(CLK_Peripheral_DMA1, ENABLE);
/* Connect ADC to DMA channel 0 */
SYSCFG_REMAPDMAChannelConfig(REMAP_DMA1Channel_ADC1ToChannel0);
DMA_Init(DMA1_Channel0, BUFFER_ADDRESS,
ADC1_DR_ADDRESS,
BUFFER_SIZE,
DMA_DIR_PeripheralToMemory,
DMA_Mode_Circular,
DMA_MemoryIncMode_Inc,
DMA_Priority_High,
DMA_MemoryDataSize_HalfWord);
/* DMA Channel0 enable */
DMA_Cmd(DMA1_Channel0, ENABLE);
/* Enable DMA1 channel0 Transfer complete interrupt */
DMA_ITConfig(DMA1_Channel0, DMA_ITx_TC, ENABLE);
/* DMA enable */
DMA_GlobalCmd(ENABLE);
}
/*初始化*/
void ADC_DMA_Init()
{
ADC_Config();
DMA_Config();
Timer1_Config();
/* Enable ADC1 DMA requests*/
ADC_DMACmd(ADC1, ENABLE);
/* Start ADC1 Conversion using TIM1 TRGO*/
ADC_ExternalTrigConfig(ADC1, ADC_ExtEventSelection_Trigger2,
ADC_ExtTRGSensitivity_Rising);
/* Master Mode selection: Update event */
TIM1_SelectOutputTrigger(TIM1_TRGOSource_Update);
// TIM1_Cmd(ENABLE);
}
012345
调试通过
怎么达到2ms触发一次呢?定时器触发与DMA_ADC有倍数关系吗?
还是跟这种方式有关?TIM1_SelectOutputTrigger(TIM1_TRGOSource_Update);
别人小白,想向楼主学习学习
#define TIM1_PERIOD 199
#define TIM1_PRESCALER 159
#define TIM1_REPTETION_COUNTER 0
/*500
信号频率 50Hz 0.02
采样率 500Hz 0.002 5个通道一次转换0.24us
*/
static void Timer1_Config()
{
/*
- TIM1CLK = 16 MHz
- TIM1 counter clock = TIM1CLK / TIM1_PRESCALER+1 = 16 MHz/(159+1) = 100kHz
*/
/* Time base configuration */
TIM1_DeInit();
adcDelay();
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, ENABLE);
TIM1_TimeBaseInit(TIM1_PRESCALER, TIM1_CounterMode_Up, TIM1_PERIOD, TIM1_REPTETION_COUNTER);
}